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

92 篇文章 1 订阅
11 篇文章 0 订阅

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值