2011-04-08 38 views
0

當服務器向客戶端發送4個或更多--25 Byte數據包時,客戶端只處理前2個數據包。我在客戶端上使用事件選擇,並在服務器上發送。沒有錯誤,但只顯示前2個數據包。提前致謝。已發送但未到達主機的Winsock TCP數據包

+1

您可能需要顯示一些代碼... – forsvarir 2011-04-08 23:23:19

+2

您是否嘗試過使用Wireshark捕捉此流量並檢查發生了什麼?也許你的消息被連接或拆分,但是在你的代碼中你不能正確處理這些消息。所有這些都將在Wireshark中可見。 – Zuljin 2011-04-08 23:26:26

回答

3

不看你的代碼,我只能認爲你可能會俯瞰一個問題,中

也許你缺少一個點,TCP是基於流協議。如果您通過從客戶端調用發送功能10次來發送數據,則無需在接收端調用接收功能10次。所有數據可以在1個接收或5個或8個或12個接收中檢索。我的意思是不要試圖以數據包的形式來看待它。你必須做好自己的識別包。

當您發送4個25個字節的數據包時。總數是100字節的數據。 在接收方,你可能會得到2個50字節的數據包,你必須使用一些開始和結束標記等自己識別你的數據包...

你也可以得到一個100字節的數據包或10個數據包10個字節。記住這一點。