您的位置:首页 > 理论基础 > 计算机网络

JAVA 网络通信中 服务器与客户端新建IO流的顺序问题

2011-09-20 18:54 471 查看
今天写程序的时候遇到了一件非常奇怪的事,客户端跟服务器用SOCKET连接时,程序很奇怪的会卡死,而且不报错,DEBUG一天一直找不到错误,单步运行到 新建IO流的地方时,程序就不能继续往下走,而且不会报错,搞了一整天,不管是服务器端还是客户端都死在新建IO流的地方。。。

后来又百度了一下,改了客户端新建IO流的顺序,竟然就好了OTL……又欣喜有抓狂……

再后来,才搞清楚是自己太粗心忘了最重要的一点。。。 今天必须整理下,吃一堑长一智。。

如果服务器和客户端是通过IO流来通信的话,新建流的顺序必须是 相反的!

比如说 服务器端 建流的顺序是:

输出流ObjectOutputStream clientOutput = new ObjectOutputStream(socket.getOutputStream());

输入流ObjectInputStream clientInput = new ObjectInputStream(socket.getInputStream());

那么客户端建立流的顺序必须是

输入流 ObjectInputStream clientInput = new ObjectInputStream(socket.getInputStream());

输出流ObjectOutputStream clientOutput = new ObjectOutputStream(socket.getOutputStream());

如果顺序不相反的话,就会出现奇怪的卡死,并且不报错!!

其实这也很容易理解,因为服务端的输出流 连接 的是 客户端的输入流 客户端的输出流 连接的是服务端的输入流

所以要是建流的顺序一样的话,就不能连接到对方的流了!!

除了IO流的顺序要注意,还有几个顺序也是要相反的

比如关闭流的顺序 要从最底层的开始close, 再关闭封装它的高级流

关闭数据库的也是 要先关闭ResultSet 再关闭Statement 再关闭数据库连接Connection。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: