2012-08-31 186 views
4

我正在與服務器進行通信,理想情況下,我希望輸入流和輸出流總是處於啓動狀態。我收到未經請求的回覆,因此我總是必須準備好接收輸入流上的數據。持久I/O流連接

在我進一步深入之前,我應該說我所做的任何連接都必須能夠支持SSL。

我遇到的問題是,當我打開一個HttpUrLConnection並從輸出流發送的東西,它不會發送實際的輸出,直到我打開輸入流。如果我打開一個輸入流,它會殺死輸出流,並且在流關閉後似乎沒有恢復它。

實現我想要的行爲的最佳方式是什麼?如果在一個端口上同時維護兩個流是不可能的,有沒有辦法讓我有兩個單獨的流通過一種端口鎖定/開關共享連接?

是否有庫用於發送輸出而不必殺死輸出流以表示我的請求結束?

+0

有沒有人使用javax.net.ssl.SSLSocket?它是否表現出與流管理一樣的行爲? – Chad

回答

2

Http是一個單一的請求協議。

您不能(除非websocket)使用http(s)創建持久連接。你需要另一個協議。

可以使用基本插座。它的工作原理大部分是一個http連接,除了url以socket://開頭。

您只需打開一個連接,然後就可以獲取輸入流和輸出流並使用它們。

+0

謝謝,這讓我走上了正軌。我使用SSLSocket並且完全成功。 – Chad

1

-我最好的選擇是使用java.nio package

-使用SocketChannel的java.nio包,我們可以設置一個SocketChannel非阻塞模式。當你這樣做時,你可以撥打connect(),read()write()異步模式。

+0

非阻塞模式如何回答問題?與阻塞模式相反? – EJP