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。
后来又百度了一下,改了客户端新建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。
相关文章推荐
- C#做客户端Java做服务器使用Socket通信的大小端序和行结束符的问题
- Java网络编程之服务器与客户端通信
- java Socket编程 服务器和客户端执行的顺序问题
- java与c++网络通信时的字节顺序问题
- Java 的 Socket 服务器和客户端通信的例子 存在一个小问题
- Java 的 Socket 服务器和客户端通信的例子 存在一个小问题
- Java实现服务器与客户端网络通信
- Java-网络通信、TCP、UDP、服务器客户端的通信
- 客户端服务器通信的乱码问题
- android客户端与javaweb服务器端数据通信-异步Get
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 网络编程_TCP_Socket通信原理_多个客户端_聊天室原理JAVA189-190
- vc++/mfc socket网络通信多客户端和服务端安全问题,服务端只处理授权客户端
- 一个 Java 的 Socket 服务器和客户端通信的例子
- Java客户端通过HttpURLConnection连接Web服务器的Session保存问题
- 读JAVA网络编程精解--服务器与客户端通信一
- iOS 中客户端和服务器的 Web Service 网络通信 (1)
- JAVA中Socket服务器/客户端的通信
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。