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 秒ごとに要求を送信しています。

それが接続なのか 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 に答える