先来看官网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关闭,如下图:
由此得出以下结论:
- 在客户端或者服务端通过socket.shutdownOutput()都是单向关闭的,即关闭客户端的输出流并不会关闭服务端的输出流,所以是一种单方向的关闭流;
- 通过socket.shutdownOutput()关闭输出流,但socket仍然是连接状态,连接并未关闭
- 如果直接关闭输入或者输出流,即:in.close()或者out.close(),会直接关闭socket