課程
/后端開發
/Java
/Java Socket應用---通信是這樣練成的
我在練習的時候客戶端請求信息時若未調用shutdownOutput()方法,服務器讀取數據時會出現阻塞現象,導致后面代碼無法執行...... 有沒有大神給我指點下啊?
2016-04-04
源自:Java Socket應用---通信是這樣練成的 3-5
正在回答
如果代碼整體還是這樣只做測試之用,那我的建議有兩個:
在writer.write("用戶名:admin;密碼:123456");中輸出的字串結尾手動加上換行符,變成writer.write("用戶名:admin;密碼:123456\n");或writer.write("用戶名:admin;密碼:123456\r");
將writer.write("用戶名:admin;密碼:123456");這個方法改為java.io.PrintWriter.println()這個方法,即改為writer.println("用戶名:admin;密碼:123456");
我認為以上兩種方法均可不必加上client.shutdownOutput();這句代碼。
_小豬 提問者
// 創建客戶端Socket???Socket client = new Socket("localhost", 8888);
???// 創建輸出流,寫入請求信息???OutputStream out = client.getOutputStream();???PrintWriter writer = new PrintWriter(out);???writer.write("用戶名:admin;密碼:123456");???writer.flush();???//這行代碼如果沒有,服務器讀取數據就會一直阻塞???client.shutdownOutput();???// 創建輸入流,接受服務器響應信息???InputStream in = client.getInputStream();???InputStreamReader inr = new InputStreamReader(in);???BufferedReader reader = new BufferedReader(inr);???String info = null;???while ((info = reader.readLine()) != null) {????System.out.println("我是客戶端,服務器說:"+info);???}???//關閉輸入流???client.shutdownInput();???// 關閉資源???client.close();
舉報
分享的是 Java 中的網絡編程,使用Socket實現網絡聊天通信
5 回答客戶端為什么關閉輸入流會報錯
2 回答為什么客戶端輸出內容中文會亂碼呢?
1 回答客戶端無法輸出信息??
2 回答輸出順序問題 (“客戶端數量” 和 “我是服務器...”)
1 回答如果客戶端不停發送數據,服務器端會不會癱瘓?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-07-01
如果代碼整體還是這樣只做測試之用,那我的建議有兩個:
在writer.write("用戶名:admin;密碼:123456");中輸出的字串結尾手動加上換行符,變成writer.write("用戶名:admin;密碼:123456\n");或writer.write("用戶名:admin;密碼:123456\r");
將writer.write("用戶名:admin;密碼:123456");這個方法改為java.io.PrintWriter.println()這個方法,即改為writer.println("用戶名:admin;密碼:123456");
我認為以上兩種方法均可不必加上client.shutdownOutput();這句代碼。
2016-04-04
// 創建客戶端Socket
???Socket client = new Socket("localhost", 8888);
???// 創建輸出流,寫入請求信息
???OutputStream out = client.getOutputStream();
???PrintWriter writer = new PrintWriter(out);
???writer.write("用戶名:admin;密碼:123456");
???writer.flush();
???//這行代碼如果沒有,服務器讀取數據就會一直阻塞
???client.shutdownOutput();
???// 創建輸入流,接受服務器響應信息
???InputStream in = client.getInputStream();
???InputStreamReader inr = new InputStreamReader(in);
???BufferedReader reader = new BufferedReader(inr);
???String info = null;
???while ((info = reader.readLine()) != null) {
????System.out.println("我是客戶端,服務器說:"+info);
???}
???//關閉輸入流
???client.shutdownInput();
???// 關閉資源
???client.close();