ポート 49030 で UDP パケットを受信する必要がある Windows 8/RT 用の Windows ストア/メトロ/モダン/RT アプリを作成していますが、パケットを受信できないようです。DatagramSocket
手紙の使用に関するチュートリアルに従いましたが、何も得られません。Wireshark で確認できるように、送信プログラムがデータを送信していることはわかっています。また、UDP 経由でデータを適切に受信する通常の BSD ソケット API (System.Net.Sockets.Socket) を使用するテスト C# コンソール アプリも作成しました。
これは機能するコードです:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.Bind(new IPEndPoint(IPAddress.Any, 49030));
byte[] buf = new byte[5000];
while (true)
{
Console.WriteLine("Received " + s.Receive(buf) + " bytes.");
}
これは、予想どおり、送信されているバイト数を報告する行を出力します。
RT アプリの私のコード:
public async void StartListening()
{
DatagramSocket s = new DatagramSocket();
s.MessageReceived += s_MessageReceived;
await s.BindServiceNameAsync(this._port.ToString());
}
void s_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Hark! A packet!"); // Breakpoint here
}
を呼び出した後StartListening()
、ブレークポイントにヒットすることはなく、出力ログには何も出力されません。
MSFT が提供する DatagramSocket サンプルを実行してみましたが、問題なく動作しました (もちろん)。resmon.exe に表示されるため、ソケットが開かれている/リッスンされていることがわかります。また、アプリのマニフェストで適切な機能をすべて有効にしています。x86 ラップトップと Surface RT (リモート デバッグ) でテストしましたが、どちらも同じ動作を示します。
なぜそれが機能しないのかについてのアイデアはありますか?