黑马程序员技术交流社区

标题: socket与IO的关闭关联 [打印本页]

作者: 丁朋伟    时间: 2011-9-20 17:02
标题: socket与IO的关闭关联
今天学习网络编程,自己写个模拟QQ
客户端创建了两个输出流
                       DataInputStream dis1 = new DataInputStream(socket.getInputStream());
                        File file = new File(dis1.readUTF());
                        System.out.println(dis1.readUTF());
                        dis1.close();


DataInputStream dis2 = new DataInputStream(socket.getInputStream());
                        File file = new File(dis2.readUTF());
                        System.out.println(dis2.readUTF());
                        dis2.close();


运行时发现 java.net.SocketException: Socket is closed错误

断点运行发现错误出现在 dis1.close();之后
查看文档发现
如果此套接字具有关联的通道,则得到的输出流会将其所有操作委托给通道。如果通道为非阻塞模式,则输出流的 write 操作将抛出 IllegalBlockingModeException
关闭返回的 OutputStream 将关闭关联套接字。


恍然大悟啊
作者: 匿名    时间: 2011-9-21 08:46
老大,你写的这个程序,什么逻辑啊,何必为难自己
作者: 匿名    时间: 2011-9-21 08:51
理解您的心情,我在轻狂的时候也这样
作者: 匿名    时间: 2011-9-21 09:30
[ code]DataInputStream dis1 = new DataInputStream(socket.getInputStream());
                        File file = new File(dis1.readUTF());
                        System.out.println(dis1.readUTF());
                        dis1.close();


DataInputStream dis2 = new DataInputStream(socket.getInputStream());
                        File file = new File(dis2.readUTF());
                        System.out.println(dis2.readUTF());
                        dis2.close();
[/code]
看代码,第一次的dis1关闭之后,构造方法了里的socket也关闭了,等下次你再拿socket.getInputStream时。socket是关闭的。
作者: 匿名    时间: 2011-9-21 09:30
[code]DataInputStream dis1 = new DataInputStream(socket.getInputStream());
                        File file = new File(dis1.readUTF());
                        System.out.println(dis1.readUTF());
                        dis1.close();


DataInputStream dis2 = new DataInputStream(socket.getInputStream());
                        File file = new File(dis2.readUTF());
                        System.out.println(dis2.readUTF());
                        dis2.close(); [/code]看代码,第一次的dis1关闭之后,构造方法了里的socket也关闭了,等下次你再拿socket.getInputStream时。socket是关闭的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2