2011-04-07 114 views
0

我正在使用UdpClient類來發送數據包。C#如何分割UDP數據包?

似乎有一個每個數據包的大小限制,因爲大數據包永遠不會到達目的地。我試圖降低數據包的大小,使數據包能夠到達目的地。我在某處讀到「標準」數據包大小限制是512字節。

但我仍然需要發送大於512字節的對象。

所以我的問題是:是否有內置的方式在.NET中將字節數組拆分爲更小的數據包。顯然,我也需要重新組裝拆分包。

我看到了Socket類中的SendFile方法,我猜應該可以自動分割大文件。但該方法不允許字節數組輸入(僅限文件名)。所以它只適用於發送存儲在硬盤驅動器上的數據,而不適用於內存數據。

+1

通過UDP發送大塊數據似乎有點奇怪,因爲使用UDP數據報不能保證到達另一端。即使他們都到達了,他們也不能保證按照原來的順序。你確定要使用UDP嗎? – 2011-04-07 22:29:45

+0

這是一款電子遊戲。我已經使用UDP進行輸入和遊戲狀態傳輸。但我認爲你是對的,也許TCP連接會更適合發送地圖,因爲這些連接確實需要安全地傳輸。 – asmo 2011-04-08 15:13:02

+1

「我在某處讀到標準數據包大小限制是512字節。」您的來源錯誤,以太網的幀大小約爲三倍。 – 2011-04-10 21:51:33

回答

0

通過UDP發送大塊數據似乎有點奇怪,因爲使用UDP數據報不能保證到達另一端。即使他們都到達了,他們也不能保證按照原來的順序。你確定要使用UDP嗎?

Ciaran Keating是對的。 TCP是我需要的更好選擇。

0

Socket類中的Send函數將一個字節數組作爲參數。

http://msdn.microsoft.com/en-us/library/w93yy28a.aspx

可以代替試試這個。

+0

Send方法將字節數組作爲一個單獨的數據包發送。因此,字節數組不能大於512字節。這是我的問題的來源。 – asmo 2011-04-08 15:14:53

+0

您可以遍歷字節數組並一次只發送512個字節。顯然包含512或更少的最後一個數據包。您可能需要將數據包編號放入發送的數據包中,以便您可以按正確的順序重新組合它們。除此之外,大多數發送數據的方法看起來像只發送單個字節數組。 – MBU 2011-04-08 18:34:28