TCP传输模式中,调用Socket的shutdownInput()和shutdownOutput()都做了些什么?

先来看官网API对于这个方法功能的描述:

shutdownInput():Places the input stream for this socket at "end of stream",即socket输入流置于流末尾,但是呢,还是不明白到底是什么意思,所以还是那句话“实践是检验真理的唯一标准~”

客户端代码:


服务端代码:

运行结果:

      客户端console:服务端返回数据

      服务端console:客户端发送的数据!


客户端加入socket.shutdownInput():

客户端代码:


服务端代码:


在客户端分别打印socket的isInputShutdown、isOutputShutdown、 isBound、 isConnected、 isClosed这几个方法的返回值:

左边客户端打印结果,右边为服务端打印结果:



我们发现当我们在客户端执行socket.shutdownOutput()后,客户端socket的输出流关闭了,即:isOutputShutdown()返回结果为true,但是socket始终处于连接状态,再看服务端打印结果,当我们关闭客户端的输出流时,服务端的输出流状态仍然处于开放状态。

但是如果直接关闭输入或者输出流,却会导致socket关闭,如下图:



由此得出以下结论:

  1. 在客户端或者服务端通过socket.shutdownOutput()都是单向关闭的,即关闭客户端的输出流并不会关闭服务端的输出流,所以是一种单方向的关闭流;
  2. 通过socket.shutdownOutput()关闭输出流,但socket仍然是连接状态,连接并未关闭
  3. 如果直接关闭输入或者输出流,即:in.close()或者out.close(),会直接关闭socket


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值