为了账号安全,请及时绑定邮箱和手机立即绑定

我跟老师一样的代码?为什么会出现这样的异常?

我跟老师一样的代码?为什么会出现这样的异常?

黄锋黄锋 2017-02-22 17:08:33
package huangfeng.TongXin; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; /*  * 基于TCP协议的Socket通信,实现用户登录  * 服务器端  */ public class Server { public static void main(String[] args) { try { //创建一个Socket服务器端,即ServerSocket,指定绑定端口,并监听此端口 //创建ServerSocket的实例 ServerSocket serverSocket = new ServerSocket(9999); System.out.println("******服务器即将启动,等待客户端的连接******"); //调用accept()方法开始监听,等待服务器的连接 Socket socket = serverSocket.accept(); //获取输入流,并读取客户端信息 InputStream is = socket.getInputStream();//字节输入流 //把字节输入流包装为字符输入流 InputStreamReader isr = new InputStreamReader(is); //加载缓冲 BufferedReader br = new BufferedReader(isr); String info = null; //获取客户端信息 while((info = br.readLine())!=null){ System.out.println("我是服务器,客户端说:"+info); //关闭输入流 socket.shutdownInput(); //关闭相关资源 br.close(); isr.close(); is.close(); socket.close(); serverSocket.close(); } } catch (IOException e) { e.printStackTrace(); } } }package huangfeng.TongXin; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /*  * 客户端  */ public class Client { public static void main(String[] args) { try { //创建客户端socket。指定服务器的地址和端口 Socket socket = new Socket("localhost", 9999); //获取输出流,向服务器端发送信息 OutputStream os = socket.getOutputStream();//字节输出流 //将输出流包装为打印流 PrintWriter pw = new PrintWriter(os); pw.write("用户名:huangfeng ; 密码:8888"); pw.flush(); socket.shutdownOutput();//关闭输出流 //关闭相关资源 pw.close(); os.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }******服务器即将启动,等待客户端的连接******我是服务器,客户端说:用户名:huangfeng ; 密码:8888java.io.IOException: Stream closed at java.io.BufferedReader.ensureOpen(BufferedReader.java:115) at java.io.BufferedReader.readLine(BufferedReader.java:310) at java.io.BufferedReader.readLine(BufferedReader.java:382) at huangfeng.TongXin.Server.main(Server.java:31)
查看完整描述

3 回答

?
ziom

TA贡献948条经验 获得超1109个赞

在读取BufferedReader的时候不能把它关了

//获取客户端信息            
while((info = br.readLine())!=null){
    System.out.println("我是服务器,客户端说:"+info);
    //关闭输入流
    socket.shutdownInput();
    //关闭相关资源
    // br.close(); 把这行注释了再试试
    isr.close();
    is.close();
    socket.close();
    serverSocket.close();
}


查看完整回答
1 反对 回复 2017-02-22
?
lindajia

TA贡献3条经验 获得超1个赞

 //获取客户端信息

            while((info = br.readLine())!=null){

                System.out.println("我是服务器,客户端说:"+info);

               }//大括号在这里 表示循环读出数据完了后,再进行后面的关闭输入流资源操作

                //关闭输入流

                socket.shutdownInput();

                //关闭相关资源

                br.close();

                isr.close();

                is.close();

                socket.close();

                serverSocket.close();

            }

             


查看完整回答
反对 回复 2017-02-22
  • 3 回答
  • 1 关注
  • 1802 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信