1

動作しない非常に単純なことをしようとしています: C# アプリケーションでは、特定のポートで UDP パッケージをリッスンしたいだけです。Wireshark を使用すると、希望するパッケージが完全に問題なく受信されていることがよくわかります (CRC とすべて問題ありません)。

ただし、インターネットで見つけたコードはどれも機能しません。たとえば、これも失敗します。

    private  void ReceiveAsync()
    {

        UdpClient Client = new UdpClient(new IPEndPoint(IPAddress.Any, 51200));

        try
        {
            Client.BeginReceive(new AsyncCallback(OnReceive), null);
        }
        catch (Exception e)
        {
            System.Windows.Forms.MessageBox.Show(e.Message);
        }
    }

    private static void OnReceive(IAsyncResult result)
    {
        System.Windows.Forms.MessageBox.Show("Simply to tell you that something was received on the port");
    }

2 つのイーサネット ネットワーク カードがインストールされています。多分これは問題になる可能性がありますか?しかし、IPアドレスを具体的に指定しても、何も変わりません。

            UdpClient Client = new UdpClient(new IPEndPoint(IPAddress.Parse("10.0.0.2"), 51200));

この問題を解決できるアイデアがあれば、とてもうれしく思います。どうもありがとうございました!

4

2 に答える 2

2

コードは問題なく動作しています - 私はそれをテストしました。

受信したデータを待つ必要があります。Clientオブジェクトはにのみ存在しますReceiveAsync

追加してみるThread.Sleep(10000)

編集:
Thread.Sleep(1000) スレッドをブロックするため、お勧めできません。
解決しようとしている問題/ケースによって異なります。複数の接続またはデータ処理を処理するある種のTCPエンジンを使用している可能性があるため、他のスレッドが処理するためにバッファ上のデータを言うことができます。

解決しようとしている問題を共有すると、より良い答えが得られる可能性があります。また、MSDN のコード例も参照できます - UdpClient.BeginReceive

于 2013-06-04T14:02:01.317 に答える