2016-09-06 8 views
0

UWPを使用してUDPマルチキャストアドレスと送受信をしようとしています。これは最初の数回は完全に動作しますが、この送信受信プロセスの時間が経過すると、受信側でロックされます。私は非同期アプローチから同期メソッドに変更しましたが、それでも同じです。新しいUDPクライアントをインスタンス化しても、ポートはアプリケーションが再起動されるまでブロックされます。私が間違っていることは何ですか?いくつかの送信/受信が受信を停止し、ポートをブロックした後のUDPクライアント

private UdpClient udp; 
//inside main function: 
if (udp == null) 
     { 
      udp = new UdpClient(new IPEndPoint(IPAddress.Any, portNumber)); 
      //^the second time this is called, it will complain about port reuse 
      udp.Client.ReceiveTimeout = udp.Client.SendTimeout = 3000; 
      //udp.Client.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.ReuseAddress, true); 
      //^invalid 
     } 

     //await udp.SendAsync(data, data.Length, , portNumber); 
     //I changed from async to synchronous in case it was the issue, but no. 
     udp.Client.SendTo(data, new IPEndPoint(IPAddress.Parse(ipString), portNumber)); 
     //the receive used to be async, too 
     byte[] receivedByte = new byte[udp.Client.ReceiveBufferSize]; 
     try 
     { 
      udp.Client.Receive(receivedByte); 
     } 
     catch (Exception ex) 
     { 
      udp.Client.Shutdown(SocketShutdown.Both); 
      udp = null; // added these, but port still blocked until restart 
     } 

私はUWPを使用していますが、ここにはないクラスライブラリのメソッドがあります。

+1

バックログやオープンできるソケットの数に制限があると思われますか? –

+0

@Am_I_Helpfulは分かりませんが、そうは思わない...外部の問題である可能性があります... – Tyress

+0

問題を再現するのに役立つ最小限のサンプルをお願いしますか? –

答えて

1

UdpClientをprivateフィールドとして宣言する代わりにusing()ステートメントに入れ、短い非同期メソッドに入れてスコープを制限した後、私はもうこれらの問題を抱えていません。

+1

OK、それは良いです;;) –

関連する問題