我有一个指向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();
}
}
}
答案 0 :(得分:0)
您的代码存在一些问题。
首先,使用new AsyncCallback(Receive)
代替Receive
作为BeginReceive
参数。
第二,默认情况下,套接字是在禁用广播发送/接收的情况下创建的。在构造函数中,udp.EnableBroadcast = true;
之前的StartListening
上将其打开。
第三,Receive
方法将在线程池线程中运行,并且您不能在那里轻松调用MessageBox.Show
。用Console.Write
代替它进行测试,并获得有关topic的信息。