2011-04-04 74 views
0

我有一個應用程序在循環中傳輸一些數據。 基礎協議是WinSock上的UDP。如果在每次發送操作後沒有添加睡眠(1ms),則大部分數據都不會發送(或wireshark無法捕獲)。您是否遇到過這樣的行爲,UDP不會處理循環中的重複發送?UDP傳輸性能

問候

Tugrul

+0

您是否檢查過發送函數的返回值? – 2011-04-04 14:35:51

+0

實際上在WinSock上有一個TCP客戶端類,我檢查它是否與某些特定的錯誤代碼相關(但不是針對所有我認爲的) – tguclu 2011-04-04 15:54:26

+0

這聽起來像非阻塞套接字,即緩衝區溢出。 – 2011-04-06 04:52:18

回答

1

第一件事情,你應該檢查返回值,當您將數據發送到檢查數據是否發送成功與否。 第二件事,這可能發生UDP的內部緩衝區不能容納更多的數據,因爲以前的數據尚未傳輸。所以最簡單的解決方案是,每次發送數據之前,您都應該檢查UDP套接字是否可寫。您可以通過在該UDP套接字上調用「select」或「poll」來完成。

+0

但它的TCP不是UDP。 – tguclu 2011-04-11 07:53:23

+1

你是什麼意思?你是說有TCP和底層的UDP?我不明白。你能解釋一下嗎? UDP和TCP都在相同的網絡層上工作,並且不能通過UDP運行TCP,反之亦然。你一定在混淆什麼。請稍微解釋一下。 – Tayyab 2011-04-11 19:52:31