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

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日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境