C#UDP监听器解除阻塞?或防止再次被卡住

Kat*_*ina 3 c# udp

我一直在寻找像我这样的先前问题,但似乎我找不到我需要的答案.

我的目标是阻止我的UDP侦听器不挂.我有一个UDP监听器等待消息,但如果没有任何东西可以接收它只是挂在那里.

我已经阅读了其他线程,他们说我需要将阻塞设置为false但我找不到如何设置它.对不起,我刚接触C#和socket编程.

这是我的听众的一部分:

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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是它只是冻结在以下行:

byte[] data = listener.Receive(ref groupEP);
Run Code Online (Sandbox Code Playgroud)

Jak*_* T. 7

使用UDPClient上的available属性(如果这是您正在使用的属性)来确定您是否要在网络队列中读取数据.

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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)