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

1

感谢开发者!您的回答很有帮助,但是我找到了一种最简单的方法。

 public class Program
 {
    public static void Main(string[] args)
    {
        UdpClient udpc = new UdpClient( System.Net.Dns.GetHostName(), 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);
        }
    }
 }
于 2013-11-14T05:36:21.683 回答
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 回答
0

我相信你的问题在于这个电话:

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

问题是,为了能够监听任何传入的内容,您首先需要将 UdpClient 绑定到一个有效的端点 - 如下所示:

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

另外,请记住,您不能同时从同一个 UdpClient 监听和发出;您将需要两个客户端,如果您想为两者使用相同的 IP 端口,则需要使用SocketOptionName.ReuseAddress参数初始化类。以下帖子提供了一个很好的示例:

将两个 UDP 客户端连接到一个端口(发送和接收)

于 2013-11-13T13:36:33.737 回答