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

今天写程序的时候遇到了一件非常奇怪的事,客户端跟服务器用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。

你可能感兴趣的:(java,数据库,IO,网络,socket,服务器)