客戶端輸出流是否shutdownOutput()會不會對程序造成異常?
我在練習的時候客戶端請求信息時若未調用shutdownOutput()方法,服務器讀取數(shù)據(jù)時會出現(xiàn)阻塞現(xiàn)象,導致后面代碼無法執(zhí)行...... 有沒有大神給我指點下???
我在練習的時候客戶端請求信息時若未調用shutdownOutput()方法,服務器讀取數(shù)據(jù)時會出現(xiàn)阻塞現(xiàn)象,導致后面代碼無法執(zhí)行...... 有沒有大神給我指點下???
2016-04-04
舉報
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
// 創(chuàng)建客戶端Socket
???Socket client = new Socket("localhost", 8888);
???// 創(chuàng)建輸出流,寫入請求信息
???OutputStream out = client.getOutputStream();
???PrintWriter writer = new PrintWriter(out);
???writer.write("用戶名:admin;密碼:123456");
???writer.flush();
???//這行代碼如果沒有,服務器讀取數(shù)據(jù)就會一直阻塞
???client.shutdownOutput();
???// 創(chuàng)建輸入流,接受服務器響應信息
???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();