0

我正在使用 c# UdpClient(代码中的客户端)来接收多播组上的数据。在 while 循环中会发生以下情况:

while(receiving)
    //First i check if data is available, polltime = 100ms
    if(client.Client.Poll(polltime, SelectMode.SelectRead))
    {
        //if data is present 
        data = client.Receive(ref remoteEp);
        ...
    }
    else
    {
        //100ms
        Thread.sleep(sleeptime);
    }

不知何故,我经常错过应该在多播上的数据包(如果有多个),我猜 udp 数据包丢失不会那么多。接收可以做得更好还是有人知道问题)

Edit1:发送的数据也是由 c# UdpClient 发送的,是大小为 1024 的字节数组

Edit2:在 Wireshark 中我可以看到丢失的数据包没有到达,所以问题可能真的是 udp 数据包丢失?

4

1 回答 1

0

我建议接收循环的以下实现:

while (receiving)
{
    try
    {
        // block until data is present
        data = client.Receive(ref remoteEp);
        ...
    }
    catch (SocketException ex)
    {
        receiving = false;
    }
}
于 2013-01-15T11:05:03.607 回答