客戶端輸出流是否shutdownOutput()會(huì)不會(huì)對(duì)程序造成異常?
我在練習(xí)的時(shí)候客戶端請(qǐng)求信息時(shí)若未調(diào)用shutdownOutput()方法,服務(wù)器讀取數(shù)據(jù)時(shí)會(huì)出現(xiàn)阻塞現(xiàn)象,導(dǎo)致后面代碼無(wú)法執(zhí)行...... 有沒(méi)有大神給我指點(diǎn)下???
我在練習(xí)的時(shí)候客戶端請(qǐng)求信息時(shí)若未調(diào)用shutdownOutput()方法,服務(wù)器讀取數(shù)據(jù)時(shí)會(huì)出現(xiàn)阻塞現(xiàn)象,導(dǎo)致后面代碼無(wú)法執(zhí)行...... 有沒(méi)有大神給我指點(diǎn)下???
2016-04-04
舉報(bào)
2016-07-01
如果代碼整體還是這樣只做測(cè)試之用,那我的建議有兩個(gè):
在writer.write("用戶名:admin;密碼:123456");中輸出的字串結(jié)尾手動(dòng)加上換行符,變成writer.write("用戶名:admin;密碼:123456\n");或writer.write("用戶名:admin;密碼:123456\r");
將writer.write("用戶名:admin;密碼:123456");這個(gè)方法改為java.io.PrintWriter.println()這個(gè)方法,即改為writer.println("用戶名:admin;密碼:123456");
我認(rèn)為以上兩種方法均可不必加上client.shutdownOutput();這句代碼。
2016-04-04
// 創(chuàng)建客戶端Socket
???Socket client = new Socket("localhost", 8888);
???// 創(chuàng)建輸出流,寫(xiě)入請(qǐng)求信息
???OutputStream out = client.getOutputStream();
???PrintWriter writer = new PrintWriter(out);
???writer.write("用戶名:admin;密碼:123456");
???writer.flush();
???//這行代碼如果沒(méi)有,服務(wù)器讀取數(shù)據(jù)就會(huì)一直阻塞
???client.shutdownOutput();
???// 創(chuàng)建輸入流,接受服務(wù)器響應(yī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("我是客戶端,服務(wù)器說(shuō):"+info);
???}
???//關(guān)閉輸入流
???client.shutdownInput();
???// 關(guān)閉資源
???client.close();