我开发了一个客户端/服务器模拟应用程序。我在两台不同的Windows XP计算机上部署了客户端和服务器。不知何故,客户端无法向服务器发送请求。
我尝试了以下选项:
使用ip-address从客户端成功ping通服务器计算机。
使用ip-address从服务器成功ping通客户端计算机。
从两台计算机上检查netstat命令行工具。服务器处于LISTENING
模式,客户端处于SYS_SENT
模式。但它用来发送的外地址是主机名而不是ip地址。
在客户端使用主机名时,ping服务器计算机失败。
使用来自服务器的主机名成功ping通客户端计算机。
我觉得问题是当客户端尝试使用主机名连接到服务器时。
您能否告诉我如何强制应用程序使用IP地址而不是主机名?有没有其他方法将主机名映射到IP地址?
答案 0 :(得分:50)
转到您的客户端计算机并输入:
nslookup server.company.com
当然,将服务器的真实主机名替换为server.company.com
。
这应该告诉你客户端正在使用哪个DNS服务器(如果有的话)以及它认为问题与名称的关系。
要强制应用程序使用IP地址,通常只需将其配置为使用IP地址而不是主机名。如果主机名是硬编码的,或者应用程序坚持使用主机名而不是IP地址(正如您的其他评论似乎表明的那样),那么您可能在那里运气不好。
但是,您可以更改大多数计算机解析主机名的方式,例如UNIXy系统上的/etc/resolv.conf
和/etc/hosts
以及Windows-y系统上的a local hosts file。
答案 1 :(得分:4)
尝试使用tracert解析主机名。 IE你有IP地址8.8.8.8所以你会使用; tracert 8.8.8.8
答案 2 :(得分:0)
如果没有关于网络架构的更多细节,这很难回答。需要调查的一些事情是:
答案 3 :(得分:0)
您可以使用C函数getaddrinfo()来获取数字地址 - 包括ipv4和ipv6。 请参阅示例代码here
答案 4 :(得分:0)
Windows XP具有Windows防火墙,如果配置不正确,可能会干扰网络流量。如果您具有管理员权限,则可以通过“控制面板”访问Windows防火墙小程序来关闭Windows防火墙。如果您的应用程序在关闭Windows防火墙的情况下工作,那么问题可能是防火墙的设置。
我们有一个应用程序可以运行在使用UDP / IP进行通信的多台PC上,我们一直在进行实验,以便应用程序可以在没有管理员权限的用户的PC上运行。为了使我们的应用程序能够在多台PC之间进行通信,我们必须使用管理员帐户来修改Windows防火墙设置。
在我们的应用程序中,一台PC被指定为服务器,其他PC是服务器/客户端组中的客户端,并且同一子网上可能有多个组。
第一个更改是使用Windows防火墙小程序的“例外”选项卡的功能为我们用于通信的端口创建例外。
我们正在使用主机名查找,以便客户端可以使用计算机名称找到其分配的服务器,该名称由助记符前缀和短划线后跟分配的终端号(例如SERVER100-1)组成。这允许多个服务器及其分配的客户端在同一子网上共存。客户端使用其前缀为分配的服务器生成计算机名称,然后使用主机名查找来发现分配的服务器的IP地址。
我们发现,除非服务器PC的Windows防火墙启用了文件和打印机共享服务端口,否则使用计算机名称(通过“系统属性”对话框的“计算机名”选项卡分配)的主机名查找将不起作用。
因此我们必须进行两项更改:(1)为我们用于通信的端口设置例外,以及(2)在“例外”选项卡中启用“文件和打印机服务”以允许主机名查找。
**编辑**
您也可以找到Microsoft Knowledge Base article on helpful on Windows XP networking。