【发布时间】:2011-01-25 01:37:02
【问题描述】:
我的程序使用 UdpClient 尝试从 27 个主机接收 27 个响应。响应的大小为 10KB。我的宽带传入带宽是 150KB/s。
主机几乎同时每 10 秒发送 27 个响应。
但是,我每次只能收到 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缓冲区问题???
【问题讨论】:
-
请考虑您可能在网络堆栈中的其他位置丢弃 UDP 数据包 - 不一定在您的宽带链路上。
-
基本上,随着时间的推移已经发现,一旦你将 UDP '修补'到它开始可靠的程度,你就会拥有一个缓慢、庞大、不可靠的 TCP 堆栈。只是说。