[英]udpclient.receive() suddenly stops receiving
我正在使用UdpClient
从单个主机接收数据(实际上,它是一个微控制器,每4毫秒发送32字节的数据。
我编写的程序非常简单。
我正在这样初始化UdpClient
(在Program.cs中):
public static UdpClient client = new UdpClient(1414);
之后,我在Form_Load事件中执行此操作:
static UdpClient client = Program.client;
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
然后像这样调用client.Recieve()
:
Task.Run(() =>
{
while (true)
{
try
{
data = client.Receive(ref RemoteIpEndPoint);
}
catch (Exception ex)
{
String err_type = ex.GetType().Name;
if (err_type == "SocketException")
{
MessageBox.Show("Cannot Find The Device.", "Device Error.");
}
}
}
});
该程序可以在我自己的系统上正常运行(使用Windows 10)。 但是,当我在Windows 7上随机运行此程序时,但client.Recieve()
停止运行的机会为100%,该程序不再接收任何数据。 没有异常被抛出。 为了找到问题的根源,我安装了Wireshark来测试是否有任何传入的数据。答案是否定的(LAN端口指示灯也停止闪烁)。 我感到困惑的是,这不会在Windows 10上发生。
事实是,您会错过除SocketException之外的所有异常。 要了解发生了什么,请重写您的catch块:
Task.Run(() =>
{
while (true)
{
try
{
data = client.Receive(ref RemoteIpEndPoint);
}
catch (SocketException ex)
{
MessageBox.Show("Cannot Find The Device.", "Device Error.");
}
catch (Exception e)
{
MessageBox.Show(e.GetType().Name, e.Message);
}
}
});
原来我的代码是完全可以的。
这是我们这方面的硬件问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.