使用UDP接收时安全地结束线程

Dum*_*pen 6 c# multithreading udp

我正在创建一个运行UDP客户端接收消息的线程,在收到消息后我要关闭UDP客户端然后结束线程,但我不知道如何结束线程,因为"接收"总是运行直到它得到了答案.

到目前为止这是我的代码:

private void RecieveChallenge()
{
    UdpClient client = new UdpClient(26000);
    IPEndPoint remoteIp = new IPEndPoint(IPAddress.Any, 0);

    Byte[] receivedBytes = client.Receive(ref remoteIp);
    string ipAddress = Encoding.ASCII.GetString(receivedBytes);
}
Run Code Online (Sandbox Code Playgroud)

重要的一行是client.Receive(ref remoteIp);

这是我开始我的线程的方式:

Thread recieveChallengeThread = new Thread(new ThreadStart(RecieveChallenge));
recieveDataThread.Start();
Run Code Online (Sandbox Code Playgroud)

M.B*_*ock 6

client.Receivebyte[]连接关闭时将返回空.您只需关闭连接并将提供的代码更改为:

private void RecieveChallenge()
{
    UdpClient client = new UdpClient(26000);
    IPEndPoint remoteIp = new IPEndPoint(IPAddress.Any, 0);

    Byte[] receivedBytes = client.Receive(ref remoteIp);
    if (receivedBytes == null || receivedBytes.Length == 0)
        return;
    string ipAddress = Encoding.ASCII.GetString(receivedBytes);
}
Run Code Online (Sandbox Code Playgroud)

虽然您可能想要RecieveChallenge返回一个布尔值来指示它是否已关闭(当然忽略了您的线程只会收到一条消息的事实).