2012-06-26 25 views
2

我正在編寫一個程序,需要像圖像這樣的大數據(並且最終可能是音頻流或其他東西,儘管這不是一個直接的目標),以及要發送的小指令主機 - >客戶端。目前,我可以將它寫成一個普通的TCP客戶端 - 服務器應用程序。但是,這意味着無論何時發送圖像,都不會傳輸其他數據,包括相當重要的小指令,這些指令可能會很快發送出去。我可以通過在服務器和每個客戶端之間創建多個套接字來解決這個問題,但是我真的寧願把事情保留在一個套接字上(並因此使用一個端口)。有沒有協議或者我可以用來同時發送多個數據流(或者至少以某種方式交織?)?任何建議,將不勝感激。單個插槽上的多個對象流

+0

This [question](http://stackoverflow.com/questions/7796179/how-does-one-establish-multiple-io-streams-between-a-client-and-server)看起來和你的相似。 – Jasonw

+2

使用額外的套接字將立即生效。編寫自己的隔行協議是一項重大風險和時間成本。做它簡單的方法。 – EJP

回答

0

我強烈建議您將這兩者分開,這是許多其他協議(例如FTP)使用的做法。

如果你真的想把它們結合起來,你可以但我不知道任何標準的工具這樣做。請記住,您需要在客戶端了解哪個字節來自哪個流的某種方式。您可能需要創建某種轉義序列來發送數據流,以向客戶端指示控制指令即將到來。當然,這個轉義序列可能會自然地出現在你的數據中,所以你也需要適當地編碼你的數據。

編輯:另一種方法將框架您的數據。先發送DATA START命令,然後發送1024字節的數據,然後發送任何其他命令,然後發送DATA CONTINUE命令,然後發送下一個1024字節,然後發送DATA END命令(DATA START/CONTINUE/END)在你創造的一些協議中編寫命令)。

如果你有時間並對學習感興趣,這將是一個有趣的問題,但如果你有任何匆忙,這可能會比使用多個套接字更慢。您始終可以首先將控制消息發送給客戶端,並讓客戶端打開到服務器的數據連接。這將允許您只需在客戶端和服務器端打開一個端口,並且通常可以簡化防火牆問題。