gpt4 book ai didi

c# - 为什么我不能得到所有的 UDP 数据包?

转载 作者:太空狗 更新时间:2023-10-30 00:58:40 26 4
gpt4 key购买 nike

我的程序使用 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缓冲区问题???

最佳答案

正如您自己所说,UDP 不可靠。所以数据包很可能在某处被丢弃。

请注意,丢包是由过载的交换机/路由器/网卡和不良链路引起的。如果有人“同时”向您发送 27 个 10Kb 的响应。很可能是您的网卡缓冲区或附近的交换机已满,导致数据包丢失。

在您有一些代码可以展示之前,可能没什么好说的。

关于c# - 为什么我不能得到所有的 UDP 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com