我在用着Socket
从 udp 多播接收数据。
代码很简单:
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
....
while (true)
{
int count = 0;
try
{
count = socket.Receive(byteArray);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return;
}
if (count > 0)
{
OnNewMessage(new NewMessageEventArgs(byteArray, count));
}
}
问题是有时我会丢失数据包。不要太频繁,每 2 分钟一次。
我确信数据包已到达,因为我可以在同一台计算机上启动的另一个 C++ 程序中看到它,并配置为接收相同的数据包。
为什么我的程序无法捕获其他程序可以捕获的数据包?为什么我会丢包?计算机是否可能太慢(或太忙)而无法接收数据包?
我每秒收到大约 2000 个数据包,并且使用 Xeon E3 处理器,我认为这应该足够了......
如果您绝对确定数据包已到达(并且:我必须强调这是not使用 UDP 时可以保证,并且每秒 2000 个数据包每两分钟丢弃 1 个数据包,这是比您可能希望的更好的接收速率,即使对于两台相邻的机器也是如此),那么这possibly表示接收缓冲区在短时间内已满。尝试增加ReceiveBufferSize.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)