我的程序使用UdpClient尝试接收来自27台主机的27个响应。响应的大小为10KB。我的宽带传入带宽是150KB/s。
这27个响应几乎同时且每10秒从主机发送一次。
但是,我每次只能收到8- 17个回复。我可以接收的响应数量是非常动态的,但在范围内。
有人能告诉我为什么吗?为什么我不能全部收到?
我知道UDP是不可靠的。但是我试着同时收到5- 10个回复,它起作用了。我猜网络连接不是那么糟糕。
代码非常简单。在27台主机上,我只使用UdpClient将10KB发送到我的机器。
在我的机器上,我有一个UdpClient接收数据报。每次我得到一个数据,我都会创建一个线程来处理它(基本上处理它意味着只打印出“我收到了10KB",但它是在一个线程中运行的)。
listener = new UDPListener(Port);
listener.Start();
while (true) {
try {
UDPContext context = listener.Accept();
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleMessage), context);
} catch (Exception) { }
}如果我将响应的大小减少到3KB,情况会变得更好,可以收到大约25个响应。
还有更多的想法吗?UDP缓冲区问题?
发布于 2010-03-09 00:50:10
正如您自己所说,UDP是不可靠的。因此,数据包很可能会在某处被丢弃。
请注意,由于交换机/路由器/网卡过载而导致数据包丢失的原因与链路损坏的原因一样多。如果有人“同时”给你发送了27个10Kb的回复。很可能是您的网卡或附近交换机的缓冲区已满,数据包被丢弃。
在您有一些代码可供展示之前,可能没有什么可说的了。
https://stackoverflow.com/questions/2402944
复制相似问题