我正在創建一個TCP服務器。我聽說,即使所有數據全部以一次寫入發送,您也無法始終依靠讀取來讀取所有數據。該協議可能會打破它。我的問題是,僅僅爲了巨大的數據包,還是會打破1kb? 500bytes?任何尺寸都安全嗎?TCP是否會破壞小於1kb的數據?
2
A
回答
2
您永遠無法指望讀取所有數據。你可以通過設置一個小的MTU來任意分解軟件包。
+0
Mensi是對的。您可以*從不*讀取一次讀取中的所有字節。根據您的套接字庫,您同樣不能指望在一次寫入中發送*所有字節。 – 2013-03-19 19:37:24
+1
爲了完全迂腐,我想你可以指望讀一個字節。 (除非超時)。 – 2013-03-19 19:38:46
1
使用TCP套接字時,您不控制發送的「數據包」。您只需向/從套接字寫入/讀取字節,並且該協議控制其傳輸的方式和時間。
對方在任何時候都願意接收的數據量實際上是最大的。這被稱爲「Maximum segment size」。你不知道這有多大,因爲它取決於你正在與之交談的人。它們可能只允許您發送最多1k段或最多500字節段的數據。沒有辦法知道,除非你能控制兩端。另外,不僅可以將寫出的字節拆分爲更小的段,而且可以將多個小寫實際上組合到一個更大的段中。請參閱Nagle's algorithm。
相關問題
- 1. 部署是否破壞數據?
- 2. 停止守護進程是否會破壞我的數據?
- 3. cycle_key是否破壞以前的會話?
- 4. 破壞骨幹視圖是否會破壞它?
- 5. CodeBlocks是否會破壞Dev studio項目?
- 6. 內存是否會被破壞?
- 7. tcp socket是否能注意到網絡破壞的異常?
- 8. 數據破壞
- 9. 這是可能打破PDF文件小於明智的破壞?
- 10. jsonToRepJson是否被破壞?
- 11. PHP數據會話重定向破壞
- 12. 破壞數據庫
- 13. 會破壞PHP
- 14. Cookie破壞會話破壞,爲什麼?
- 15. 在返回之前是否會破壞參數?
- 16. scala在函數簽名中是否會破壞類型?
- 17. 刷新頁面是否會破壞PHP會話?
- 18. 在android中更改背景顏色是否會破壞小部件的外觀?
- 19. 在數據已經存在的情況下,更改列的數據類型是否會破壞數據?
- 20. 會話是維護還是被破壞?
- 21. 會話不破壞
- 22. Cakephp會話破壞
- 23. 是multiprocessing.Manager().dict().setdefault()是否被破壞?
- 24. 當數據庫事務被損壞時是否有突破點?
- 25. J2ME的Integer.parseInt()是否被破壞?
- 26. 節點的assert.Throws是否完全破壞?
- 27. 逆向代理是否會破壞CDN的地理優勢?
- 28. JBoss Seam是否會破壞JSF的生命週期?
- 29. 如何驗證舊會話是否真的被破壞?
- 30. 基於Tegra的設備上的OES_framebuffer_object擴展是否被破壞?
這不是一個真正的編程問題,而是幫助理解TCP/IP協議。爲此,我建議使用http://www.ietf.org/rfc.html – 2013-03-19 19:35:44
我不同意,Morten。正確使用TCP是一個編程問題。 – 2013-03-19 20:16:15