2010-01-18 70 views
0

我的服務器使用UDP。它被收購後自動發送900bytes/1ms到我的程序。我在Windows中使用套接字API(VB 6)。我做了測試,我知道我的程序的消息處理時間(大約0.3ms)比周期時間(1ms)短。所以原因應該是socket內部緩衝區。我嘗試調用setsockopt函數來設置更大的緩衝:使用套接字API的UDP

setsockopt的(SockNum,SOL_SOCKET,SO_RCVBUF,SockBuffer(1),1048576)

但我還是丟失的數據。我該如何解決我的問題? 我正在使用recv函數來接收數據。應該改善嗎?

更多的人,我需要做的UDP一個FIFO緩衝器。我能做些什麼(算法或例子)?

回答

1

在你的問題,你似乎是在抱怨使用UDP和數據丟失。

如果使用的是UDP,你會丟失數據。避免丟失數據的方式是使用TCP,而不是UDP。如果您嘗試使用用戶數據報協議併爲其添加可靠的數據傳輸,則最終會得到一些具有TCP的所有流量控制和數據窗口的內容......除非它不會像以前那樣實施你要。

記住,「誰不明白TCP註定要重塑它....不好」

+0

你總是可以實現像TCP SYN/ACK系統,但較少的驗證,因此被之間的中間地帶TCP和UDP。但是如果問題是數據丟失,那可能是因爲UDP,是的。 –

+0

謝謝,但我的服務器是電子板。它使用UDP,我不能更改 – kheo

+0

,我的電腦(運行我的程序 - 客戶端)通過5米電纜直接連接到服務器,所以我認爲它很難丟失數據。 – kheo