【问题标题】:Use dns server error使用dns服务器错误
【发布时间】:2016-12-29 04:05:11
【问题描述】:

我有一个远程桌面项目,需要使用 DNS 服务器连接

我有一个错误说ip的格式和无效

 private static void ConnectToServer()
        {
            int attempts = 0;

            while (!clientSocket.Connected)
            {
                try
                {
                    attempts++;
                    Console.WriteLine("Connection attempt " + attempts);

                    // clientSocket.Connect(IPAddress.Parse(Dns.GetHostAddresses("kamikazehc.ddns.net")), port);
                    clientSocket.Connect(IPAddress.Parse("kamikazehc.ddns.net"), port); 
                    Thread.Sleep(100);
                }
                catch (SocketException)
                {
                    Console.Clear();
                }
            }

            Console.Clear();
            Console.WriteLine("Connected");
        }

编辑:

此代码保留在外部用户中,我的计算机以管理员身份工作。

当用户运行控制台时,他应该连接到 kamikazehc.ddns.net,(我的电脑)

Kamikazehc.ddns.net 在 189.6.26.203 上解析。

我只能在本地连接 使用:

clientSocket.Connect(IPAddress.Parse("192.168.1.102"), port);

当用户连接到我的电脑时,它应该出现在这个列表中:

http://prntscr.com/dpelr6

private static Socket clientSocket = new Socket
        (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

   private const int port = 100; // same as server port

【问题讨论】:

  • 你应该使用Dns.GetHostEntry而不是IPAddress.Parse
  • 从 cmd.exe > IPConfig/All 运行开始。检查 dns 服务器的名称。然后从 cmd.exe 尝试 ping 服务器以获取 IP 地址。 IPAddress.Parse() 方法需要 IP 地址。使用以下: LocalHostIPEntry = Dns.GetHostEntry(LocalHostName); LocalHostIP = LocalHostIPEntry.AddressList[0];
  • prntscr.com/dpepy5 DNs 服务器

标签: c# dns server connect host


【解决方案1】:

您应该使用Dns.GetHostEntry 将域名解析为IP 地址。

IPAddress.Parse 仅将 IP 地址字符串转换为 IPAddress 实例。

试试

clientSocket.Connect(Dns.GetHostEntry("kamikazehc.ddns.net").AddressList[0], port); 

注意:这里主机条目中返回的第一个IP地址用于连接。

编辑:
来自 cmets:您的问题是因为您不清楚 TCP IP 网络的工作方式。您需要将名称解析为您的本地 IP。通常公共 IP 在本地网络中不起作用。您可以执行以下操作。

在system32/etc/drivers/hosts文件中添加主机条目

192.168.1.102    kamikazehc.ddns.net

如果您可以修改您的 DNS 服务器主机条目以对内部网络进行不同的解析,那就更好了。但我现在不向你推荐它。如果您有网络管理员,您可以请他/她为您做这件事。那么你就不需要主机条目了。

如果您无法从外部网络连接上述代码,则需要检查防火墙设置。

【讨论】:

  • 192.168.1.102 是一个可解析为 IP 地址的字符串。所以这是正确的。其中kamikazehc.ddns.net 是域名,DNS 需要将其解析为对应的 IP 地址。所以你需要Dns.GetHostEntry
  • 仅在使用本地 ip 时有效:clientSocket.Connect(IPAddress.Parse("192.168.1.102"), port);
  • 是的 192.168.x.x 范围是本地 IP。对我来说 kamikazehc.ddns.net 解析为 189.6.26.127
  • 我想我得到了你的方案。 kamikazehc.ddns.net 在您的本地网络中。那么您应该做的是使用我提供的代码并更改您的 DNS 服务器,以便在本地网络请求时将其解析为 192.168.1.102
  • 你使用的端口是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2011-04-16
  • 2015-09-30
相关资源
最近更新 更多