2011-04-07 144 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