4

ポート 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 (リモート デバッグ) でテストしましたが、どちらも同じ動作を示します。

なぜそれが機能しないのかについてのアイデアはありますか?

4

0 に答える 0