zaaserz 2021-09-02 18:11 采纳率: 75%
浏览 161

c# UdpClient 无法接收到广播数据

设备与电脑使用网线直连,设备通过广播模式向固定端口发送数据。现在需要我这边使用进行数据接收。但我使用C# 的udpClient一直收不到数据。
但网络调试助手是可以收到的,因此排除了电脑原因。
下面是我的代码:我尝试了使用线程方式与异步方式都无法接收到数据。
求帮助啊

 public AsyncUDP(IPAddress localIPAddress, int listenPort, int maxClient)
        {
            this.Address = localIPAddress;
            this.Port = listenPort;
            this.Encoding = Encoding.Default; 
            _maxClient = maxClient;
            //_clients = new List<AsyncUDPSocketState>();
            _server = new UdpClient(new IPEndPoint( Address,Port));  
            _server.EnableBroadcast = true;
              //Task.Factory.StartNew(() => { Receive(); });
                 _server.BeginReceive(ReceiveDataAsync, null);
        }
//使用线程方式接收
  private void Receive()
        {
            while (IsRunning)
            {
                

                IPEndPoint ip = new IPEndPoint(IPAddress.Any,0);
                var bytes = _server.Receive(ref ip);
                Console.WriteLine("接收:"+bytes.Length);
            }
        }
//使用异步方式接收
       private void ReceiveDataAsync(IAsyncResult ar)
        {
            IPEndPoint remote = null;
            byte[] buffer = null;
            try
            {
                buffer = _server.EndReceive(ar, ref remote);
                AsyncUDPState state = new AsyncUDPState();
                state.buffer = buffer;
                state.remote = remote;
                //触发数据收到事件
                RaiseDataReceived(state);
            }
            catch (Exception)
            {
                //TODO 处理异常
                RaiseOtherException(null);
            }
            finally
            {
                if (IsRunning && _server != null)
                    _server.BeginReceive(ReceiveDataAsync, null);
            }
        }

  • 写回答

2条回答 默认 最新

  • 肖无疾 2021-09-02 23:50
    关注
    
    private void button1_Click(object sender, EventArgs e)
            {
                int port = int.Parse(textBox2.Text);
                Socket sock = new Socket(AddressFamily.InterNetwork,
    SocketType.Dgram, ProtocolType.Udp);
                IPEndPoint iep =
                new IPEndPoint(IPAddress.Any, port);
                sock.Bind(iep);
                EndPoint ep = (EndPoint)iep;
                log("Ready to receive…");
    
                Task.Run(()=> {
                    while (true)
                    {
                        byte[] data = new byte[1024];
                        int recv = sock.ReceiveFrom(data, ref ep);
                        string stringData = Encoding.UTF8.GetString(data, 0, recv);
                        log(stringData);
                    }                
                });         
            }
    
            void log(string txt)
            {
                textBox1.Text += txt + "\r\n";
            }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月2日

悬赏问题

  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)