我正在使用SDL和Net2庫作爲客戶端 - 服務器應用程序。我面臨的問題是,我沒有收到來自我的客戶端的所有TCP數據包,除非在發送每個數據包之前放置一個延遲從客戶端。刪除延遲我只得到一個數據包。SDL Net2缺少TCP數據包
回答
TCP連接是一個字節流。您的客戶端可以發送20個每個5個字節的數據包,服務器將其讀取爲100個字節的序列。你需要自己分開數據。
那麼你不能保證(在普通插座)在同一時間接收所有數據包,您可能需要調用你的接收功能不止一次,接收所有數據。這當然取決於你對「數據包」的定義,你是否收到你的所有數據?
+1埃裏克
是的,我收到我的所有數據。關於如何申報我的數據包的任何建議?我已經意識到我的數據包非常小,並且TCP在發送它們之前將它們捆綁在一起,而不是每次發送一個數據包。我在開始時使用「密鑰」發送數據包,以便服務器知道如何處理每個數據包,但現在我發現這種情況正在發生,我不知道該怎麼辦。 – 2011-03-08 16:39:43
與您的'鑰匙'一起,您可以簡單地運行收到的數據並檢查您的鑰匙,或者在每個數據包的開頭,您可以發送此消息的準確字節數。很多選項=) – ultifinitus 2011-03-08 18:08:48
雖然不能保證是可靠的,您很可能希望使用UDP,TCP沒有。 Net2很好地處理UDP。 UDP實際上非常可靠。 UDP是面向消息的。 UDP消息往往會很快得到發送,並得到路由器的特殊待遇(並不總是一件好事:-)。 UDP通常用於遊戲。
順便說一句,如果你問的SDL郵件列表在這個問題上,或直接發送給我,你會在幾個月前得到了這個建議。
我寫了Net2,然後掛在SDL列表中。我不會在這裏閒逛,因爲這個地方是無限的時間。
鮑勃·彭德爾頓
- 1. 缺少SDL庫?
- 2. Erlang gen_tcp缺少數據包?
- 3. SDL缺少x86_64架構
- 4. 缺少CR-TCP採樣器
- 5. 缺少TCP連接重用
- 6. 缺少UDP發送數據包
- 7. 數據綁定反饋.NET2
- 8. 缺少Nuget包
- 9. 缺少JSON數據
- 10. TCP RST數據包延遲數據包
- 11. Pypi缺少Urllb2包
- 12. 包中缺少'PactFragment'au.com.dius.pact.model
- 13. 缺少TCL包smtp
- 14. 缺少android包 - API22
- 15. 缺少「DES」 TCL包
- 16. MigratorDotNet缺少數據庫類
- 17. 缺少數據庫表 - CakePHP
- 18. Recode缺少數據Numpy
- 19. 缺少數據合併
- 20. MVC Action缺少數據
- 21. 缺少圖像數據
- 22. Maven - SQLite - 缺少數據庫
- 23. 在Python中缺少數據
- 24. oracle dba_identifiers缺少數據
- 25. 缺少數據更新
- 26. python缺少數據pct_change
- 27. 在Dataframe中缺少數據
- 28. NSURLConnection sendSynchronousRequest - 缺少數據
- 29. nLog缺少日誌數據
- 30. 的ReportViewer缺少數據源
如你所說,它似乎我在一次接受我的所有數據我做到了。 – 2011-03-08 16:19:33
但我不希望發生這種情況,我可以禁用它嗎? – 2011-03-08 16:23:44
這是TCP的工作原理。它不知道邏輯分組,它只是一系列傳輸的字節。 – Erik 2011-03-08 16:26:44