客戶端為什么關閉輸入流會報錯
老師在上面關閉了socket的輸出流,接下來的接收服務器響應的代碼我發現沒有關閉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();
//創建輸入流,接收服務端響應
InputStream?is=sk.getInputStream();
BufferedReader?br=new?BufferedReader(new?InputStreamReader(is));
String?info=null;
while((info=br.readLine())!=null){
System.out.println("我是客戶端,服務器說:"+info);
}
br.close();
is.close();
sk.shutdownInput();//關閉socket的輸入流
pw.close();
os.close();
sk.close();
}?catch?(UnknownHostException?e)
{
//?TODO?自動生成的?catch?塊
e.printStackTrace();
}?catch?(IOException?e)
{
//?TODO?自動生成的?catch?塊
e.printStackTrace();
}
}
}
2016-10-27
我也碰到了這個問題,是這樣的,你應該先關閉輸入輸出流,然后在關閉資源,就不會這樣了,把上面的兩個資源關閉放到下面就可以了
2016-10-24
我想你跟我犯了同樣的錯誤,我也是報的這個錯誤。然后我發現客戶端不是關閉輸入流socket.shutdownInput();,而是關閉輸出流scoket.shutdownOutput();
因為先啟動服務器,再啟動客戶端,你想想:
首先服務器端是建立了socket然后等待接收信息的,信息接收完畢,所以要關閉輸入流。
然后客戶端是發送信息的,信息發送完畢,所以要關閉輸出流。
其次服務器端的輸出流以及客戶端的輸入流在最后關閉資源的時候會自動關閉的。
2016-08-29
?關閉輸出流時,會連帶的自動把socket也關了的,所以,你后面再關閉輸入流時,socket其實已經被關閉了,估計會報 空指針異常!
2016-08-29
你沒有先啟動服務器端
2016-08-29
報的什么錯誤,貼出來