将主机名parsing为一个IP地址

我开发了一个客户/服务器模拟应用程序 我在两台不同的Windows XP机器上部署了客户机和服务器。 不知何故,客户端不能发送请求到服务器。

我尝试了下面的选项:

  1. 从客户端使用IP地址成功地阻塞了服务器计算机。

  2. 从服务器使用IP地址成功的客户端机器。

  3. 从两台机器上检查netstat命令行工具。 服务器处于LISTENING模式,客户端处于SYS_SENT模式。 但是它用来发送的外地址是主机名而不是IP地址。

  4. 拼写服务器机器使用来自客户端的主机名称失败。

  5. 从服务器成功使用主机名拼写客户机。

我觉得问题是当客户端试图使用主机名连接到服务器。

你可以让我知道如何强制一个应用程序使用一个IP地址,而不是一个主机名? 有没有其他方法将主机名映射到一个IP地址?

转到您的客户端机器并输入:

 nslookup server.company.com 

当然,将服务器的真实主机名替换为server.company.com

这应该告诉你你的客户正在使用哪个DNS服务器(如果有的话)以及它认为问题出在哪里。

强制应用程序使用IP地址,通常只需将其配置为使用IP地址而不是主机名。 如果主机名是硬编码的,或者应用程序坚持使用优先于IP地址的主机名(正如您的其他评论似乎表明的那样),那么您可能在那里运气不好。

但是,您可以更改大多数计算机解析主机名的方式,例如使用UNIXy系统上的/etc/resolv.conf/etc/hosts以及Windows-y系统上的本地主机文件 。

您可以使用C函数getaddrinfo()来获取数字地址 – ipv4和ipv6。 在这里看到示例代码

尝试tracert来解析主机名。 IE你有IP地址8.8.8.8所以你会使用; tracert 8.8.8.8

没有关于网络架构的更多细节,这很难回答。 有些事情要调查是:

  • 客户端和/或服务器可能位于NAT设备,防火墙或类似设备之后吗?
  • 是否有任何IP地址涉及“本地”地址,如192.168.xy或10.xyz?
  • 什么是主机名称,它们是“真正的”DNS:能够使用的名称还是更多本地和/或Windows特定的名称?
  • 客户端如何查找服务器? 代码或配置数据中必须有一个保存主机名的地方,如果您想避免查找,只需尝试使用IP即可。

Windows XP有Windows防火墙,如果配置不正确,可能会干扰网络通信。 如果您拥有管理员权限,则可以通过控制面板访问Windows防火墙小程序来关闭Windows防火墙。 如果您的应用程序在关闭Windows防火墙的情况下运行,则问题可能是由于防火墙的设置所致。

我们有一个应用程序运行在多台使用UDP / IP的PC上,我们一直在做实验,以便应用程序可以在没有管理员权限的用户的PC上运行。 为了使我们的应用程序能够在多台PC之间进行通信,我们必须使用管理员帐户来修改Windows防火墙设置。

在我们的应用程序中,一台PC被指定为服务器,而另一台则是服务器/客户机组中的客户机,同一子网上可能有多个组。

第一个更改是使用Windows防火墙小程序的“例外”选项卡的功能为我们用于通信的端口创建例外。

我们正在使用主机名称查找,以便客户端可以通过使用计算机名称来定位其分配的服务器,该计算机名称由一个带有破折号的助记符前缀和一个分配的终端号(例如SERVER100-1)组成。 这允许多个服务器与其分配的客户端在同一个子网上共存。 客户端使用其前缀来为分配的服务器生成计算机名称,然后使用主机名称查找来发现分配的服务器的IP地址。

我们发现,除非服务器PC的Windows防火墙启用了“文件和打印机共享服务”端口,否则使用计算机名称(通过“系统属性”对话框的“计算机名称”选项卡分配)的主机名查找将不起作用。

所以我们必须做两个改变:(1)为我们用于通信的端口设置一个例外,(2)在例外选项卡中启用文件和打印机服务,以允许查找主机名。

**编辑**

您也可以在Windows XP网络上找到有用的Microsoft知识库文章 。

在Windows上看到这篇关于NETBIOS名字解析的文章 。