0

我创建了一个非常简单的应用程序来使用 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 处放置一个断点进行了双重检查。

为了检查是连接还是 PC,我下载了 Microsoft Network Monitor 并进行了捕获。这完美地捕获了请求,所以我知道它与我的程序有关。

有任何想法吗?

4

1 回答 1

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 循环的原因。

于 2012-09-26T12:42:55.237 回答