客戶端為什么關(guān)閉輸入流會報錯
老師在上面關(guān)閉了socket的輸出流,接下來的接收服務(wù)器響應(yīng)的代碼我發(fā)現(xiàn)沒有關(guān)閉socket的輸入流,于是我加了socket.shuntdownInput程序就會報錯
package?com.imooc; import?java.io.BufferedReader; import?java.io.BufferedWriter; import?java.io.IOException; import?java.io.InputStream; import?java.io.InputStreamReader; import?java.io.OutputStream; import?java.io.OutputStreamWriter; import?java.io.PrintWriter; import?java.net.Socket; import?java.net.UnknownHostException; public?class?Client { public?static?void?main(String[]?args) { try { Socket?sk=new?Socket("localhost",8888); OutputStream?os=sk.getOutputStream(); PrintWriter?pw=new?PrintWriter(os); pw.println("用戶名:admin,密碼:123456"); pw.flush();//刷新緩存 sk.shutdownOutput(); //創(chuàng)建輸入流,接收服務(wù)端響應(yīng) InputStream?is=sk.getInputStream(); BufferedReader?br=new?BufferedReader(new?InputStreamReader(is)); String?info=null; while((info=br.readLine())!=null){ System.out.println("我是客戶端,服務(wù)器說:"+info); } br.close(); is.close(); sk.shutdownInput();//關(guān)閉socket的輸入流 pw.close(); os.close(); sk.close(); }?catch?(UnknownHostException?e) { //?TODO?自動生成的?catch?塊 e.printStackTrace(); }?catch?(IOException?e) { //?TODO?自動生成的?catch?塊 e.printStackTrace(); } } }
2016-10-27
我也碰到了這個問題,是這樣的,你應(yīng)該先關(guān)閉輸入輸出流,然后在關(guān)閉資源,就不會這樣了,把上面的兩個資源關(guān)閉放到下面就可以了
2016-10-24
我想你跟我犯了同樣的錯誤,我也是報的這個錯誤。然后我發(fā)現(xiàn)客戶端不是關(guān)閉輸入流socket.shutdownInput();,而是關(guān)閉輸出流scoket.shutdownOutput();
因為先啟動服務(wù)器,再啟動客戶端,你想想:
首先服務(wù)器端是建立了socket然后等待接收信息的,信息接收完畢,所以要關(guān)閉輸入流。
然后客戶端是發(fā)送信息的,信息發(fā)送完畢,所以要關(guān)閉輸出流。
其次服務(wù)器端的輸出流以及客戶端的輸入流在最后關(guān)閉資源的時候會自動關(guān)閉的。
2016-08-29
?關(guān)閉輸出流時,會連帶的自動把socket也關(guān)了的,所以,你后面再關(guān)閉輸入流時,socket其實已經(jīng)被關(guān)閉了,估計會報 空指針異常!
2016-08-29
你沒有先啟動服務(wù)器端
2016-08-29
報的什么錯誤,貼出來