繁体   English   中英

udpclient.receive()突然停止接收

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM