我需要使用UDP将相同的数据报发送到许多端点,并且网络不支持多播,只能单播。 为了测试,我创建了一个endpoinst列表(支持的地址范围内的伪IP)和一个有效的机器返回列表末尾的echo。 目标是测量端到端延迟。 使用WireShark我发现UDP消息在发送方上非常快速地序列化,但接收消息需要很长时间。
在一段时间或条件发生后,Windows UDP sockests是否组合在一起并通过NIC发送?如何刷新每个数据报?
我看到NoDelay和LingerOptions不适用于UDP,但在发送之前看起来像是在延迟。
伪代码:
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--;
}
}
}