我正在使用绑定到提供的端点的UdpClient侦听传入数据包。我的代码如下:UdpClient在监听不再可用的地址时如何处理?
...
string myIpAddress = "192.168.1.100";
int myPort = 50000;
IPEndPoint selfEndPoint = new IPEndPoint(IPAddress.Parse(myIpAddress), myPort);
IPEndPoint anySourceEndPoint = new IPEndPoint(IPAddress.Any, 0);
UdpClient receivingClient = new UdpClient();
receivingClient.Client.Bind(selfEndPoint); // Can throw.
receivingClient.Receive(ref anySourceEndPoint);
...
如果IP地址为“192.168.1.100”的接口不存在,它抛出一个SocketException`(如预期)。在这种接口存在的情况下,UdpClient成功绑定并等待传入数据包。我的问题如下。
如何检测我在哪里上阻塞Receive
和接口的地址的情况下不再可用?
例如,该应用程序正在运行,并且正在等待传入数据包。用户然后禁用系统上的网络接口。应用程序仍然认为它可以接收数据包,即使它不能。
的关闭我来是在客户端设置并重新创建一个ReceiveTimeout
/当这个超时结合UdpClient;我希望有其他建议或其他建议。
我理解正确吗?你想能够处理禁用他的网卡的用户?如果我理解正确,那么你对此有何期望?你写道你想重新创建/绑定一个UdpClient,但是如果没有启用网卡,那该怎么办? –
@JanDoerrenhaus网卡不是问题。我认为问题是,不像TCP(SYN,ACK等)那样,在关闭连接请求上不发送数据包?最好的事情可能是捕获SocketException并使用ErrorCode提供的 –
@LewsTherin“然后用户禁用系统上的网络接口。”这听起来很像我的网卡是问题所在。 –