我创建了一个非常简单的应用程序来使用UdpClient接收DHCP消息。
UdpState s = new UdpState();
s.u = server;
s.e = ClientEndPoint;
server = new UdpClient();
server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
server.Client.Bind(new IPEndPoint(IPAddress.Any, 67));
server.BeginReceive(new AsyncCallback(OnRecieve), s);
void OnRecieve(IAsyncResult asycnResult)
{
Console.WriteLine("Got something");
// Do something
}
我有一个请求IP地址的设备,因此每5秒发送一次请求等.OnRecieve从不触发,我通过在Console.WriteLine上设置一个断点进行了双重检查。
检查是否是我下载Microsoft网络监视器的连接或PC并进行了捕获。这完全捕获了请求,所以我知道它与我的程序有关。
有什么想法吗?
答案 0 :(得分:0)
好
我将以下内容放在控制台应用
中 static Boolean done = false;
static void Main(string[] args)
{
Object s = new object();
UdpClient server = new UdpClient();
server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
server.Client.Bind(new IPEndPoint(IPAddress.Any, 67));
server.BeginReceive(new AsyncCallback(OnRecieve), s);
while (!done) { Thread.Sleep(10); }
}
static void OnRecieve(IAsyncResult asycnResult)
{
Console.WriteLine("Got something");
done = true;
// Do something
}
}
过了一段时间后,它“得到了一些东西”
我会得出结论,要么你的udpclient没有等待 - 很可能......因为那就是为什么我添加了while循环。