c# - udpclient.receive() 突然停止接收
问题描述
我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 上随机运行这个程序时,有 100%client.Recieve()
的机会停止工作并且程序不再接收任何数据。不抛出异常。为了找到问题的根源,我安装了 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);
}
}
});
推荐阅读
- javascript - WebCrypto 执行问题,由于数据类型错误而失败,并将所有处理结果编译在一个统一的字段中
- android - Zoom HERE 地图以显示所有标记 Android
- python - ValueError:长度不匹配:预期轴有 23 个元素,新值有 2 个元素。熊猫长度不匹配
- python - 如何将中间数量的数据传递给子进程?
- python - 使用python显示docx文件的内容
- vb.net - 计算文本框中所有行的总和
- python - 带有棉花糖的 Hybrid_property
- covariance - 关于协方差和逆变的问题
- java - Spring 控制器单元测试抛出 NestedServletException
- javascript - 使用反应我试图在点击更新 aa 值时改变按钮的颜色