慕粉客
2016-08-29 17:03
老师在上面关闭了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(); } } }
我也碰到了这个问题,是这样的,你应该先关闭输入输出流,然后在关闭资源,就不会这样了,把上面的两个资源关闭放到下面就可以了
我想你跟我犯了同样的错误,我也是报的这个错误。然后我发现客户端不是关闭输入流socket.shutdownInput();,而是关闭输出流scoket.shutdownOutput();
因为先启动服务器,再启动客户端,你想想:
首先服务器端是建立了socket然后等待接收信息的,信息接收完毕,所以要关闭输入流。
然后客户端是发送信息的,信息发送完毕,所以要关闭输出流。
其次服务器端的输出流以及客户端的输入流在最后关闭资源的时候会自动关闭的。
关闭输出流时,会连带的自动把socket也关了的,所以,你后面再关闭输入流时,socket其实已经被关闭了,估计会报 空指针异常!
你没有先启动服务器端
报的什么错误,贴出来
Java Socket应用---通信是这样练成的
125013 学习 · 590 问题
相似问题