0

このコード例http://msdn.microsoft.com/en-us/library/tst0kwb1.aspxを使用して、メッセージを送受信できるコンソール UDP サーバーを作成しました。

しかし、私はこれをコンソール アプリケーションにしたくありません。フォームを使用したいのです。アプリケーションにメッセージ送信機能を正常に実装しましたが、リスナーを機能させる方法がわかりません。

メッセージを受信するためのコードは次のとおりです。何もしません。
注: このコードは、ボタン クリック イベント コードのすぐ下に配置しました。

private void StartListener()
    {
        bool done = false;
        UdpClient listener = new UdpClient(listenPort);
        IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);

        try
        {
            while (!done)
            {
                this.lblMessage.Text = "Waiting for broadcast";
                byte[] bytes = listener.Receive(ref groupEP);

                this.lblRecieve.Text = Encoding.ASCII.GetString(bytes, 0, bytes.Length);
            }

        }
        catch (Exception e)
        {
            this.lblMessage.Text = e.ToString();
        }
        finally
        {
            listener.Close();
        }
    }

このコードは明らかに間違っていますが、私はこれまで C# で何もしたことがなく、このコンソール サンプル コードが UDP サーバーに関する唯一のガイドでした。

メッセージを送信するためのコードは次のとおりです。完全に機能します。

private void btnSend_Click(object sender, EventArgs e)
    {
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        IPAddress broadcast = IPAddress.Parse("192.168.0.105");
        byte[] sendbuf = Encoding.ASCII.GetBytes("test");
        IPEndPoint ep = new IPEndPoint(broadcast, listenPort);
        s.SendTo(sendbuf, ep);
        this.lblMessage.Text = "Sent Message";
    }

編集:

私はあなたから得た助けに感謝していますが、私自身の壊れたコードを機能させるために微調整する代わりに、私が望むように機能するように微調整する別のコードを見つけました.

C# でのサーバー クライアント アプリケーションの UDP データグラム コード

これは私が借りたコードで、stop() が正しく動作しないことを除けば完全に動作しますが、大きな問題ではなく、Google で修正するのは難しくありません。

皆さんがくれたリンクから、今でも多くのことを学びました。

4

2 に答える 2

3

おそらく動作しますが、見えないだけです。エンドレス ループで UI スレッドを停止すると、フォームが完全に機能しなくなります。どちらも描画されないため、ラベルの更新が表示されません。

UdpClient.BeginReceive() の使用を開始するか、このコードを実行するスレッドを作成する必要があります。スレッドを使用する場合は、 Control.BeginInvoke() を使用してラベルを更新する必要があります。

于 2012-04-17T05:29:12.983 に答える
0

リスナーを登録する必要があります。次の記事を確認してください。

イベントのチュートリアル

于 2012-04-17T05:28:56.883 に答える