C # UDP прослушиватель разблокирует?или не допустить застревания - PullRequest
3 голосов
/ 09 мая 2011

Я искал предыдущие проблемы, подобные моей, здесь, но, похоже, я не могу найти нужный мне ответ.

Моя цель - не допустить зависания моего прослушивателя UDP.У меня есть прослушиватель UDP, который ждет сообщений, но если ему нечего получить, он просто зависает там.

Я прочитал другие темы, и они говорят, что мне нужно установить для Blocking значение false но я не могу найти, как это установить.Извините, я новичок в C # и программировании сокетов.

Вот часть моего слушателя:

while (true)
{
    try
    {
        byte[] data = listener.Receive(ref groupEP);

        IPEndPoint newuser = new IPEndPoint(groupEP.Address, groupEP.Port);
        string sData =  (System.Text.Encoding.ASCII.GetString(data));

    }
    catch (Exception e)
    {
    }
}

Моя проблема в том, что он просто зависает в следующей строке:

byte[] data = listener.Receive(ref groupEP);

Ответы [ 2 ]

7 голосов
/ 09 мая 2011

Используйте свойство available в UDPClient (если это то, что вы используете), чтобы определить, есть ли у вас данные в сетевой очереди для чтения.

while (true)
{
    try
    {
        if (listener.Available > 0) // Only read if we have some data 
        {                           // queued in the network buffer. 
            byte[] data = listener.Receive(ref groupEP);

            IPEndPoint newuser = new IPEndPoint(groupEP.Address, groupEP.Port);
            string sData =  (System.Text.Encoding.ASCII.GetString(data));
        }
    }
    catch (Exception e)
    {
    }
}
0 голосов
/ 11 сентября 2017
        UdpClient client = new UdpClient();
        //Some code goes here ...
        client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 2000);

// Это довольно ясно и просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...