請假設我們可以區分不同TCP連接的數據包,如果是這樣,那麼我們能否在服務器端的唯一套接字上接受多個TCP連接?我知道服務器綁定在一個套接字上,並且在接受新連接時爲新連接分配一個新套接字。我會覆蓋ACCEPT systemcall?在服務器上的唯一一個套接字上處理多個TCP連接
回答
請假設,我們可以互相
區分不同的TCP連接的數據包你不能假設的。通過TCP連接應用程序不可見「數據包」。 TCP連接提供了一個字節流。你不能保證你讀的下一個東西會是一個消息頭,告訴你消息來自哪個客戶端。
數據包邊界不可見,但addr,port信息是。沒有理由TCP套接字不能像UDP套接字一樣工作,從而提供「來自addr,port的下n個字節」,其中n是任意的(與UDP不同)。 – user1055568
@ user1055568'addr.port'信息'通過TCP連接對應用程序不可見,而不是通過'getpeername()',它適用於套接字以及整個連接。我不知道你在說什麼。 – EJP
我只是說這是伯克利套接字API的設計方式,與TCP協議是否定義應用程序級數據包邊界無關。 – user1055568
- 1. whois的TCP套接字連接失敗的一個服務器
- 2. 如何處理TCP C#套接字服務器中的多個活動連接?
- 3. Matlab的TCP/IP服務器套接字多個連接
- 4. 在Java中處理多個TCP連接(服務器端)
- 5. 處理多個客戶端連接的Perl TCP服務器
- 6. NodeJS如何使用套接字處理多個TCP連接
- 7. 連接到兩個不同端口上的服務器的TCP套接字
- 8. 處理多個套接字連接
- 9. Python套接字處理多個連接
- 10. java服務器來處理多個TCP連接
- 11. 用於多連接處理的Python套接字服務器
- 12. Netty TCP服務器,只需一個套接字連接就能服務多個請求
- 13. 如何在Java服務器上接受多個套接字連接
- 14. 一次可以在TCP套接字上寫多少個字節?
- 15. 在Golang服務器中接受一個持久的tcp連接
- 16. 同一客戶端上的多個websockets連接 - 服務器無法處理
- 17. 創建一個新的tcp套接字 - 服務器端
- 18. 處理(多線程)套接字服務器新服務器套接字
- 19. MongoError:無法連接到服務器上的第一個連接
- 20. 在WP7上創建一個套接字服務器
- 21. 在一臺機器上連接兩個(或多個)套接字客戶端
- 22. IOexception發送一個對象到服務器(套接字連接)
- 23. 同一端口套接字上的多個連接C++
- 24. PHP能夠處理多個TCP連接?
- 25. 流式套接字服務器在Linux中無法處理超過382個線程(每個連接一個)
- 26. 連接多個客戶端的異步套接字服務器
- 27. 多個客戶端 - 一個服務器連接帶有套接字tcp/ip c#.net
- 28. Java服務器套接字:我的服務器套接字只允許客戶端連接在同一個Internet連接上運行?
- 29. 在服務器上接受客戶端的多個連接
- 30. 無法連接到其他PC的TCP套接字服務器
所以,你想在服務器*一個*套接字接收來自所有連接的所有數據?就像爲UDP做的一樣?然後,在TCP中不可能,因爲它是一個連接的協議,每個連接都是一個獨立的實體。 –
爲什麼?你提到的所有東西都已經由TCP完成了,並且每個接受的連接都以獨立套接字的形式完成。你爲什麼認爲你需要重新創建API? – EJP
@ EJP。認爲我想用最小的延遲處理很多連接,所以最好是通過一個套接字來處理所有連接,而不是爲每個連接創建一個套接字,但ACCEPT systemcall爲每個接受的連接返回單獨的套接字。正因爲如此,我認爲我應該重寫ACCEPT systemcall! – MSH