2011-09-24 599 views
3

我們將開發一款支持互聯網多人遊戲的遊戲。因爲它是一個交互式遊戲,我知道我必須使用UDP來減少連接延遲,但是我想知道使用UDP連接傳遞的包中可能發生的錯誤是什麼?在我看來,他們認爲UDP提供了「盡力而爲」,但沒有人給出完整的解釋,這意味着什麼。在閱讀了一些文章後,我仍然有兩個問題:什麼是可能的UDP數據傳輸錯誤?

  1. 是否可以在連接的另一端發送包並接收它的一部分?
  2. 如果你對第一個問題的回答是真的,下一個包會發生什麼?我是否應該等待包裹的其餘部分,或者我可以假設下一包從我的下一個recv呼叫開始?

對於我們的遊戲,我認爲我們需要發送4個大約每秒20個字節的包。

+0

如果可能,請嘗試將這四個軟件包合併爲一個。開銷會更小。 – DarkDust

+0

我認爲「數據包」是指「包」或消息,而不是許多數據包中的碎片? –

+0

請考慮您對最小包大小的保證,它允許您發送每更新更多信息:http://stackoverflow.com/q/1098897/175849 –

回答

2

可能發生的最常見的事情是:一方發送消息,另一方不收到任何消息。

是否可以發送一個包,並在另一個 端接收它的一部分?

不是真的,即使消息是巨大的,它被分割。不像在TCP,在UDP每個消息是獨立的。你要麼完全沒有,要麼完全沒有。

所以你應該做的只是recvfrom事情在循環中並處理它們。顯然,你應該讓你的應用程序不會受到消息丟失的影響,以至於丟失的消息不會使其崩潰。

+0

在帶有[UDPlite]的Linux上(http://en.wikipedia.org/ wiki/UDP_Lite),您可以接收部分數據包,對流式視頻非常有用,幾乎無所不用。 –

相關問題