我正在編寫一個程序,需要像圖像這樣的大數據(並且最終可能是音頻流或其他東西,儘管這不是一個直接的目標),以及要發送的小指令主機 - >客戶端。目前,我可以將它寫成一個普通的TCP客戶端 - 服務器應用程序。但是,這意味着無論何時發送圖像,都不會傳輸其他數據,包括相當重要的小指令,這些指令可能會很快發送出去。我可以通過在服務器和每個客戶端之間創建多個套接字來解決這個問題,但是我真的寧願把事情保留在一個套接字上(並因此使用一個端口)。有沒有協議或者我可以用來同時發送多個數據流(或者至少以某種方式交織?)?任何建議,將不勝感激。單個插槽上的多個對象流
2
A
回答
0
我強烈建議您將這兩者分開,這是許多其他協議(例如FTP)使用的做法。
如果你真的想把它們結合起來,你可以但我不知道任何標準的工具這樣做。請記住,您需要在客戶端了解哪個字節來自哪個流的某種方式。您可能需要創建某種轉義序列來發送數據流,以向客戶端指示控制指令即將到來。當然,這個轉義序列可能會自然地出現在你的數據中,所以你也需要適當地編碼你的數據。
編輯:另一種方法將框架您的數據。先發送DATA START命令,然後發送1024字節的數據,然後發送任何其他命令,然後發送DATA CONTINUE命令,然後發送下一個1024字節,然後發送DATA END命令(DATA START/CONTINUE/END)在你創造的一些協議中編寫命令)。
如果你有時間並對學習感興趣,這將是一個有趣的問題,但如果你有任何匆忙,這可能會比使用多個套接字更慢。您始終可以首先將控制消息發送給客戶端,並讓客戶端打開到服務器的數據連接。這將允許您只需在客戶端和服務器端打開一個端口,並且通常可以簡化防火牆問題。
相關問題
- 1. 多個按鈕的插槽
- 2. Node.JS單個插槽,多個事件(上傳)
- 3. Qt多個webview處理單插槽
- 4. 單個對象上的多個突變
- 5. 在對象上使用信號/插槽
- 6. 創建一個別名到一個對象的插槽R
- 7. PySide一個插槽多個部件
- 8. PyQt5一個信號和多個插槽
- 9. 多個表單對象上的InitBinder
- 10. 單個對象,多個IBOutlets
- 11. OpenMP僅檢測多插槽/多核系統上的單個內核
- 12. Protégé-OWL:「多槽」對象
- 13. 將所有的對象信號連接到一個插槽
- 14. 查找對象數組中的第一個空插槽
- 15. 流中的多個JSON對象
- 16. 的boost :: signals2 - 與插槽的對象descruction
- 17. Qt插槽和信號。獲取插槽接收器對象
- 18. TCP套接字,在單個網絡流C上發送多個對象#
- 19. 流星:將多個對象存儲在一個對象中
- 20. 獲取對象的插槽值
- 21. Aurelia:模板中有多個插槽?
- 22. 多個(但不是全部)卡插槽
- 23. 對於多個插槽的LSF不同資源請求
- 24. 在單個Typoscript對象路徑中包含多個插件
- 25. 單個插槽上的混合I/O操作
- 26. 插入多個對象的SQLAlchemy錯誤
- 27. 頁面上的多個jquery document.ready槽ajax
- 28. 全日曆插槽顯示單個插槽的開始時間爲2小時
- 29. VBA中單個對象上的多個條件格式
- 30. Rails 3.1一個表單上的多個對象
This [question](http://stackoverflow.com/questions/7796179/how-does-one-establish-multiple-io-streams-between-a-client-and-server)看起來和你的相似。 – Jasonw
使用額外的套接字將立即生效。編寫自己的隔行協議是一項重大風險和時間成本。做它簡單的方法。 – EJP