我的应用程序不使用UdpClient接收数据

时间:2012-09-26 12:31:48

标签: c# dhcp

我创建了一个非常简单的应用程序来使用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并进行了捕获。这完全捕获了请求,所以我知道它与我的程序有关。

有什么想法吗?

1 个答案:

答案 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循环。