- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 427字
- 2020-10-30 18:10:56
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。