0

C# を使用して、自分のマシンでクライアント - サーバー シナリオをシミュレートしようとしています。しかし、私がそれを実行しているとき、次のように言って例外がポップアップします:

そのようなホストは知られていません

私のコード:

namespace TCPClient
{
    public class Program
    {
        public static void Main(string[] args)
        {
            UdpClient udpc = new UdpClient(args[0], 2055);
            IPEndPoint ep = null;
            while (true)
            {
                Console.Write("Name: ");
                string name = Console.ReadLine();
                if (name == "") break;
                byte[] sdata = Encoding.ASCII.GetBytes(name);
                udpc.Send(sdata, sdata.Length);
                byte[] rdata = udpc.Receive(ref ep);
                string job = Encoding.ASCII.GetString(rdata);
                Console.WriteLine(job);
            }
        }
    }
}

どこが間違っているのかわかりません。

4

3 に答える 3

0

あなたの問題はこの電話にあると思います:

byte[] rdata = udpc.Receive(ref ep)

問題は、着信コンテンツをリッスンできるようにするには、最初に UdpClient を有効なエンドポイントにバインドする必要があることです-次のように:

IPEndPoint ep = new IPEndPoint(IPAddress.Any, 8192);
//You will be listening to port 8192.

また、同じ UdpClient からリッスンと発行の両方を行うことはできないことに注意してください。2 つのクライアントが必要です。両方に同じ IP ポートを使用する場合は、SocketOptionName.ReuseAddressパラメーターを使用してクラスを初期化する必要があります。良い例は、次の投稿で提供されています。

2 つの UDP クライアントを 1 つのポートに接続する (送受信)

于 2013-11-13T13:36:33.737 に答える
0

問題を切り分けます。あなたは呼び出しnew UdpClient(args[0], 2055)ており、udpc.Receive(ref ep)それはこの例外をスローする可能性がありますが、どちらがスローするかは言わないでください。デバッグするか、定数文字列で試してください。

string host = args[0];
new UdpClient(host, 2055);

hostそうすれば、おそらく既存のホスト名ではないことがわかります。そうであれば、あなたが何をしているのかを確認してepくださいnullドキュメントで説明されているように、 UDP データグラムをリッスンしたいと思うので、エンドポイントを指定します。

ep = new IPEndPoint(IPAddress.Any, 0);
于 2013-11-13T13:34:13.880 に答える