6

2台のコンピューター間にUDP通信リンクを設定しようとしています。1台のコンピューターはクライアントアプリを実行しており、もう1台のコンピューターはサーバーアプリを実行しています。クライアントアプリはエラーを出します:

この操作を実行する前に、Bindメソッドを呼び出す必要があります。

以下は、以下のクライアントのコードです。エラーが発生した場所についてコメントしました。

 public delegate void ShowMessage(string message);
    UdpClient udpClient = new UdpClient();
    Int32 port = 11000;
    public ShowMessage myDelegate;
    Thread thread;


private void Form1_Load(object sender, EventArgs e)
    {
        thread = new Thread(new ThreadStart(ReceiveMessage));
        thread.IsBackground = true;
        thread.Start();
    }


    private void ReceiveMessage()
    {
        while (true)
        {
            IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, port);

            //Error on this line
            byte[] content = udpClient.Receive(ref remoteIPEndPoint);

            if (content.Length > 0)
            {
                string message = Encoding.ASCII.GetString(content);


                this.Invoke(myDelegate, new object[] { message });
            }

        }

    }

どんな助けでも大歓迎です。

ソース-> http://lamahashim.blogspot.com/2009/06/using-c-udpclient-send-and-receive.html

4

4 に答える 4

8

Bind最初にリスニングサーバーを呼び出す必要があると思います:

udpServer.Client.Bind(new IPEndPoint(IPAddress.Any, 11000));
于 2012-07-27T15:06:41.817 に答える
7

リッスンするポートを udpclient に伝える必要があります。receive メソッドに渡す IPEndpoint は、送信者の詳細が入力されるため、好きなように設定できます。ポート11000をリッスンするようにudpclientに指示しません。実際には、ポート0をリッスンしようとしています。これは、udpclientに独自のポートを選択するように指示します。

http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.receive.aspxをご覧ください。

リッスンするポートを指定してコンストラクターが呼び出されることがわかります。

于 2012-07-27T15:47:31.190 に答える
-1

まあ..私は多くの検索を行いませんでした..しかし、私はこれを使用し、それはうまくいきました:

UdpClientv4.Client.Connect(ipEndPointv4);

バインドの代わりにコネクトを使用しました。Connect が Bind を呼び出している可能性があります。

于 2018-05-10T19:01:29.213 に答える