UDP客户端在多次发送/接收后停止接收并阻塞端口

本文关键字:客户端 UDP | 更新日期: 2023-09-27 18:05:53

我正在尝试使用UWP发送和接收UDP多播地址。它在最初的几次中工作得很好,但是在这个发送-接收过程的一段时间后,它将锁定在接收部分。我从异步方法改为同步方法,但还是一样的。即使我实例化了一个新的UDP客户端,端口也会被阻塞,直到应用程序重新启动。我做错什么了吗?

private UdpClient udp; 
//inside main function:
 if (udp == null)
        {
            udp = new UdpClient(new IPEndPoint(IPAddress.Any, portNumber));
            //^the second time this is called, it will complain about port reuse
            udp.Client.ReceiveTimeout = udp.Client.SendTimeout = 3000;
            //udp.Client.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.ReuseAddress, true);
            //^invalid 
        }
        //await udp.SendAsync(data, data.Length, , portNumber);
        //I changed from async to synchronous in case it was the issue, but no.
        udp.Client.SendTo(data, new IPEndPoint(IPAddress.Parse(ipString), portNumber));
        //the receive used to be async, too
        byte[] receivedByte = new byte[udp.Client.ReceiveBufferSize];
        try
        {
            udp.Client.Receive(receivedByte);
        }
        catch (Exception ex)
        {
            udp.Client.Shutdown(SocketShutdown.Both);
            udp = null; // added these, but port still blocked until restart
        }

我使用的是UWP,类库中有一些方法不在这里。

UDP客户端在多次发送/接收后停止接收并阻塞端口

将UdpClient放入using()语句中,而不是将其声明为私有字段,并通过将其放入简短的异步方法来限制其范围,我不再有这些问题了。