在多播上接收所有udp数据包

时间:2013-01-15 09:13:31

标签: c# sockets udp multicast udpclient

我使用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丢包?

1 个答案:

答案 0 :(得分:0)

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

while (receiving)
{
    try
    {
        // block until data is present
        data = client.Receive(ref remoteEp);
        ...
    }
    catch (SocketException ex)
    {
        receiving = false;
    }
}