2012-01-11 130 views
2

C類繼承Thread套接字關閉VS的InputStream接近

static Queue<Socket> socketQueue 
Make connection to another server or client 
And then add socket to socketqueue 

類延伸線

method a 
bufferedinputstream bis = socketQueue.poll 
Do work 
Make bis null without closing it<br> 

b級延伸線

Method b 
Bufferedinputstream bis = socketqueue.poll 
Do work 
Make bis null without closing it 

我的確讓bufferedinput流空,因爲我不想關閉連接的套接字。幾個帖子告訴我,關閉輸入/輸出流也會關閉套接字。 每當我使用輸入/輸出流與套接字,我通常關閉流和套接字,如果它不爲空。

我在這裏要做的是在不需要再次連接的情況下,使輸入或輸出流成爲活動和重用。

我試過socket.shutdowninput和output,但是,當我使用套接字創建另一個輸入/輸出流時,會引發異常。

有什麼我誤解或缺少在這一點上?

回答

8

通過套接字的連接只有一個InputStream和一個OutputStream。只要關閉其中任何一個(或Socket本身),連接就會自動關閉。你需要存儲你需要的流並使用它們,每次你需要它們時都不能從同一個Socket中得到它們。

+0

感謝您的回答。所以我無法用一個連接的套接字創建多個數據流,同時自由關閉其中一個並仍然使用其他套接字。 – handicop 2012-01-11 22:30:08

+0

對。如前所述,你需要將鏈接存儲在某個地方並從那裏使用它們;通常的做法是隻要您需要時使用存儲的流。這在多線程場景中可能不切實際,但在這種情況下,即使多個流寫入相同的套接字,您也必須非常小心,不要輕易破壞所有內容。 :) – Bombe 2012-01-12 08:04:33

+1

每次你需要它們時,你確實可以從套接字中獲取它們。 – EJP 2016-02-25 22:14:56