UDP延迟,多个端点单播

时间:2013-06-16 05:24:48

标签: c# sockets udp

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

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

我看到NoDelay和LingerOptions不适用于UDP,但在发送之前看起来像是在延迟。

伪代码:

  • 生成列表(5000个端点)
  • 在列表末尾添加Echo设备
  • Foreach(endpointList中的var ep){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--;
            }
    
        }
    }
    

0 个答案:

没有答案