0

我需要使用 UDP 将相同的数据报发送到许多端点,并且网络不支持多播,仅支持单播。为了测试,我创建了一个端点列表(支持的地址范围内的假 IP)和一台在列表末尾返回 echo 的有效机器。目标是测量端到端延迟。使用 WireShark,我看到 UDP 消息在发送方上的序列化速度非常快,但接收消息需要很长时间。

Windows UDP 套接字是否组合在一起并在一段时间或条件发生后通过 NIC 发送?如何刷新每个数据报?

我看到 NoDelay 和 LingerOptions 不适用于 UDP,但看起来它在发送之前一直存在。

伪代码:

  • 生成列表(5000 个端点)
  • 在列表末尾添加 Echo 设备
  • Foreach (var ep in endpointList) {SendDataRetries(ep, payload);}

    public void SendDataRetries(string downlink, IPEndPoint ep, int retries)
    {
        if (string.IsNullOrEmpty(downlink))
            return;
    
    
        Byte[] sendBytes = Encoding.ASCII.GetBytes(downlink + "\r\n");
    
        for (int x = 0; x < retries; x++)
        {
            try
            {
    
                using (Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
                {
                    server.DontFragment = true;                        
                    server.SendTo(sendBytes, ep);
                    server.Close(); //is this really needed to flush the write?
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(string.Format("\n\nException\ndownlink:{0}\nep:{1}\nex:{2}", downlink, ep, ex));
                x--;
            }
    
        }
    }
    
4

0 回答 0