2011-02-01 10 views
1

これは本当に奇妙だと思います。 UdpClientを使用してブロードキャストmsgを同期受信しようとしましたが、ブロードキャストが完了しても戻りません。それ以降の放送でのみ、私はそのメッセージを受け取りました。フレームワークのどこかにバグがあると思いますか?UdpClient受信が2ndブロードキャストまで返されない

clientListener.BeginReceive(new AsyncCallback(RxBcastCallback), clientListener); 
//this is passed as AsyncCall.AsyncState in the callback 

.....

UdpClient udpListener = (UdpClient)AsyncCall.AsyncState;   

IPEndPoint remoteEndPt = new IPEndPoint(IPAddress.Any, 0); 

byte[] inBuffer = udpListener.Receive(ref remoteEndPt); 
//does not return until subsequent broadcast 

おかげで、 ケニー

+0

? – RobinG

+0

同じUdpClientオブジェクトからのものです。 clientListener.BeginReceive(new AsyncCallback(RxBcastCallback)、clientListener); //これはコールバックでAsyncCall.AsyncStateとして渡されます – Kenny

+0

あなたの答えがあります。あなたのコールバックは、最初のメッセージを非同期的に受信しています。そして、あなたの同期の受信呼び出しは、すべての可能性の高い順に2番目を受け取ります。 – RobinG

答えて

1

は、あなたのコールバックエンドポイントは、おそらく次のようになります。AsyncCall.AsyncState値から来るん

UdpClient udpListener = (UdpClient)AsyncCall.AsyncState; 
IPEndPoint e = (IPEndPoint)((UdpState)(AsyncCall.AsyncState)).e; 
byte[] inBuffer= udpListener.EndReceive(AsyncCall, ref e); 
+0

はいロビン、そうです。 Receiveを同期的に呼び出すのではなく、EndReceiveを呼び出す必要があります。 APIは本当に困惑しています(そして、それは簡単に穴に入ることがあります)ありがとう - 今働くようです。 – Kenny

関連する問題