UDP客户端未监听

时间:2018-11-14 01:31:57

标签: c# udp broadcastreceiver

我有一个指向127.0.0.1:15000的简单UDP客户端,我有一个提供程序,它通过UDP向我发送信息,他说,他通过网络广播信号,他不知道客户端在监听什么,那个如果我指向正确的端口,我应该能够接收信号。我知道这听起来有点令人困惑,但这里出了什么问题?我的提供者是否错误,或者我没有正确收听广播?

    private int port;
    private UdpClient udp;
    public UdpReceiver(int port)
    {
        this.port = port;
        udp = new UdpClient(port);
        StartListening();
    }
    private void StartListening()
    {
        this.udp.BeginReceive(Receive, new object());
    }
    private void Receive(IAsyncResult ar)
    {
        if (udp != null)
        {
            IPEndPoint ip = new IPEndPoint(IPAddress.Any, port);
            byte[] bytes = udp != null ? udp.EndReceive(ar, ref ip) : null;
            if (bytes != null)
            {
                string message = Encoding.ASCII.GetString(bytes);
                MessageBox.Show(message);
                StartListening();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

首先,使用new AsyncCallback(Receive)代替Receive作为BeginReceive参数。

第二,默认情况下,套接字是在禁用广播发送/接收的情况下创建的。在构造函数中,udp.EnableBroadcast = true;之前的StartListening上将其打开。

第三,Receive方法将在线程池线程中运行,并且您不能在那里轻松调用MessageBox.Show。用Console.Write代替它进行测试,并获得有关topic的信息。