A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁朋伟 黑马帝   /  2011-9-20 17:02  /  2334 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学习网络编程,自己写个模拟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 将关闭关联套接字。


恍然大悟啊

4 个回复

倒序浏览
黑马网友  发表于 2011-9-21 08:46:53
沙发
老大,你写的这个程序,什么逻辑啊,何必为难自己
回复 使用道具 举报
黑马网友  发表于 2011-9-21 08:51:42
藤椅
理解您的心情,我在轻狂的时候也这样
回复 使用道具 举报
黑马网友  发表于 2011-9-21 09:30:07
板凳
[ 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:28
报纸
[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是关闭的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马