Java核心技术·卷Ⅱ:高级特性(原书第10版)
上QQ阅读APP看书,第一时间看更新

4.2.3 半关闭

半关闭(half-close)提供了这样一种能力:套接字连接的一端可以终止其输出,同时仍旧可以接收来自另一端的数据。

这是一种很典型的情况,例如我们在向服务器传输数据,但是一开始并不知道要传输多少数据。在向文件写数据时,我们只需在数据写入后关闭文件即可。但是,如果关闭一个套接字,那么与服务器的连接将立刻断开,因而也就无法读取服务器的响应了。

使用半关闭的方法就可以解决上述问题。可以通过关闭一个套接字的输出流来表示发送给服务器的请求数据已经结束,但是必须保持输入流处于打开状态。

如下代码演示了如何在客户端使用半关闭方法:

服务器端将读取输入信息,直至到达输入流的结尾,然后它再发送响应。

当然,该协议只适用于一站式(one-shot)的服务,例如HTTP服务,在这种服务中,客户端连接服务器,发送一个请求,捕获响应信息,然后断开连接。

java.net.Socket 1.0

·void shutdownOutput()1.3

将输出流设为“流结束”。

·void shutdownInput()1.3

将输入流设为“流结束”。

·boolean isOutputShutdown()1.4

如果输出已被关闭,则返回true。

·boolean isInputShutdown()1.4

如果输入已被关闭,则返回true。