亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用socket的tcp方式,客戶端服務器循環發送數據怎么實現?

用socket的tcp方式,客戶端服務器循環發送數據怎么實現?

慕粉4241372 2017-04-21 10:41:33
設想如下:啟動服務端--啟動客戶端,鍵入數據,發送--服務端接收數據,打印出來,鍵入數據,發送--客戶端接收數據,打印出來,鍵入數據,發送--如此無限反復--public?class?Server?{ ????static?BufferedReader?br?=?null; ????static?BufferedWriter?bw?=?null; ????static?Scanner?scanner?=?new?Scanner(System.in); ???? ????public?static?void?main(String[]?args)?{ ??????try?{ ??????????ServerSocket?serverSocket?=?new?ServerSocket(8877); ????????System.out.println("這里是服務端,等待客戶端連接"); ????????Socket?socket?=?serverSocket.accept(); ????????System.out.println("已和客戶端建立連接"); br?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream())); bw?=?new?BufferedWriter(new?OutputStreamWriter(socket.getOutputStream())); Receiver(); }?catch?(IOException?e)?{ e.printStackTrace(); } } public?static?void?send()?{ String?info?=?scanner.nextLine(); try?{ bw.write(info); bw.flush(); }?catch?(IOException?e)?{ e.printStackTrace(); } Receiver(); } public?static?void?Receiver()?{ String?info?=?null; try?{ while?((info?=?br.readLine())?!=?null)?{ System.out.println(info); } }?catch?(IOException?e)?{ e.printStackTrace(); } send(); } }客戶端類似,也是一個send()一個receiver()方法,先調用send方法發送然后調用receiver接收,無限循環。但執行起來在鍵入數據后卻無法發送,按回車發送不出去,怪事。后來我嘗試另一種寫法,每次在方法里面創建輸入輸出流,然后在finally里面關閉public?class?Server?{ static?Scanner?scanner?=?new?Scanner(System.in); static?Socket?socket; public?static?void?main(String[]?args)?{ try?{ ServerSocket?serverSocket?=?new?ServerSocket(8877); System.out.println("這里是服務端,等待客戶端連接"); socket?=?serverSocket.accept(); System.out.println("已和客戶端建立連接"); Receiver(); }?catch?(IOException?e)?{ e.printStackTrace(); } } public?static?void?send()?{ String?info?=scanner.nextLine(); try?{ BufferedWriter?bw?=??new?BufferedWriter(new?OutputStreamWriter(socket.getOutputStream())); bw.write(info); bw.flush(); }?catch?(IOException?e)?{ e.printStackTrace(); }?finally?{ try?{ socket.shutdownOutput(); }?catch?(IOException?e)?{ e.printStackTrace(); } Receiver(); } } public?static?void?Receiver()?{ String?info?=?null; try?{ BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream())); while?((info?=?br.readLine())?!=?null)?{ System.out.println(info); } }?catch?(IOException?e)?{ e.printStackTrace(); }?finally?{ try?{ socket.shutdownInput(); }?catch?(IOException?e)?{ e.printStackTrace(); } send(); } } }這樣能循環一次,但后面就提示流=已經關閉,是不是意味著shutdown輸入輸出流后就不能重新打開了?但不關閉的話又會出現和上面一樣的情況。請問大神們這樣子到底應該怎么寫呢?
查看完整描述

1 回答

  • 1 回答
  • 1 關注
  • 4501 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號