2011-10-17 42 views
1

我正在用Java創建一個客戶端/服務器對,目前它只支持通過PrintWriters和BufferedReaders進行隔行掃描的文本通信,這些通信都包裹在服務器和客戶端的IO流中。如何在客戶端和服務器之間建立多個IO流?

我想實現使用圖像[輸入/輸出]流以在設定的時間間隔從服務器發送一個BufferedImage到客戶端的功能。

的問題是,我想BufferedImages發送/在單獨的線程接收,使得客戶機/服務器仍然可以發送/接收文本命令。

我可以創建多個流或套接字嗎?如果是這樣,那是最好的方法嗎?有一個插槽來完成這項

+3

您可以創建多個套接字,只需以與創建第一個套接字相同的方式打開附加套接字(但不能將多個套接字打開到相同的IP /端口組合,但選擇不同的端口)。 – Thor84no

+0

謝謝。我想我可能不得不朝那個方向前進。有沒有辦法做到只有1端口?我可能想要實現應該同時運行的其他函數......應用程序打開這麼多端口是否正常? – derrik

+0

應用程序打開許多端口是非常正常的,但對於最終用戶來說,如果你堅持使用它,顯然會更好。唯一的另一種選擇是按照Jarrod的描述在單個套接字上覆用數據。 – Thor84no

回答

7

一種方法是在連接到插座單字節流複用的各個流,良好的執行,這是BEEP

0

是的,當然你可以根據需要創建儘可能多的線程和套接字。請注意:不要忘記關閉套接字並保持線程創建過程受到控制:很多線程不會提高性能,甚至可能導致系統停止。

也許你應該使用線程池。但這取決於你的應用程序。看看java.util.concurrency包裝。

如果您有更具體的問題,請不要猶豫,問問他們。

0

複用流應該保持多個緩衝區。

閱讀器應通過複用流給它自己的緩衝區。在寫操作期間,多路複用流應該增長每個緩衝區,並且在讀操作期間收縮期望的緩衝區。

單一的反繞緩衝器是更難管理,因爲讀者需要是有狀態的,但一般更具可擴展性,如果沒有高性能的。

使用的特定連接協議是實現細節。網絡套接字只是緩衝區,可用於實現多路複用流。網絡成爲這種情況下的瓶頸。

相關問題