2013-03-19 19 views
2

我正在創建一個TCP服務器。我聽說,即使所有數據全部以一次寫入發送,您也無法始終依靠讀取來讀取所有數據。該協議可能會打破它。我的問題是,僅僅爲了巨大的數據包,還是會打破1kb? 500bytes?任何尺寸都安全嗎?TCP是否會破壞小於1kb的數據?

+0

這不是一個真正的編程問題,而是幫助理解TCP/IP協議。爲此,我建議使用http://www.ietf.org/rfc.html – 2013-03-19 19:35:44

+0

我不同意,Morten。正確使用TCP是一個編程問題。 – 2013-03-19 20:16:15

回答

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