2010-07-06 223 views
30

我開發了客戶端/服務器模擬應用程序。我在兩臺不同的Windows XP機器上部署了客戶端和服務器。不知何故,客戶端無法向服務器發送請求。使用IP地址將主機名解析爲IP地址

  1. Ping探測服務器的機器成功地從客戶端:

    我想下面的選項。

  2. 從服務器使用ip-address成功掛起客戶機。

  3. 從兩臺機器檢查了netstat命令行工具。服務器處於LISTENING模式,客戶端處於SYS_SENT模式。但它用來發送的外地址是主機名而不是IP地址。

  4. 使用來自客戶端的主機名拼合服務器機器失敗。

  5. 成功使用來自服務器的主機名拼寫客戶機。

我覺得問題是當客戶端嘗試使用主機名連接到服務器時。

請你讓我知道如何強制應用程序使用IP地址而不是主機名?有沒有其他方法可以將主機名映射到IP地址?

+0

你在使用什麼庫? inet_addr可能對您有用嗎? http://msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx – Patrick 2010-07-06 08:31:41

回答

0

如果沒有關於網絡架構的更多細節,這很難回答。有些事情需要調查:

  • 客戶端和/或服務器可能位於NAT設備,防火牆或類似設備之後嗎?
  • 是否有任何IP地址涉及「本地」地址,如192.168.x.y或10.x.y.z?
  • 什麼是主機名稱,它們是「真實的」DNS:能夠使用的名稱還是更多本地和/或Windows特定的名稱?
  • 客戶端如何查找服務器?在保存主機名的代碼或配置數據中必須有一個地方,如果您想避免查找,只需嘗試使用IP即可。
+0

感謝您的回覆。 IP地址是本地的,它們以192.168.x.y開頭。 DNS名稱對本機來說更爲本地化。我爲應用程序提供IP地址,但不知怎的,它在將數據發送到服務器時使用主機名(使用netstat外部地址標識)。 – Mahesh 2010-07-06 08:37:18

38

轉到您的客戶端計算機,然後鍵入:

nslookup server.company.com 

server.company.com代替,當然你的服務器的真實主機名。

這應該告訴你你的客戶端正在使用哪個DNS服務器(如果有的話)以及它認爲問題出在哪裏。

強制一個應用程序使用IP地址,一般你只是配置它使用IP地址,而不是主機名。如果主機名是硬編碼的,或者應用程序堅持使用優先於IP地址的主機名(正如其他評論似乎表明的那樣),那麼您可能在那裏運氣不佳。

但是,你可以改變,大部分機解析主機名,如在Windows-Y系統上UNIXy系統/etc/resolv.conf/etc/hostsa local hosts file的方式。

+0

我在客戶端和服務器上都試過nslookup。 客戶端: ----------------- Nslookup的客戶端PC 服務器:ns.murphx.net 地址:62.69.62.6 ** ns.murphx。網絡無法找到acf-pc:不存在的域。 當我使用nslookup server-pc時也有同樣的反應。 服務器: --------- nslookup客戶端電腦 ***默認服務器不可用。 服務器:未知 地址:127.0.0.1 nslookup server-pc ***默認服務器不可用。 服務器:未知 地址:127.0.0.1 DNS請求超時。超時時間爲2秒。 ***要求未知超時。 當我做了nslookup server-pc的時候有同樣的反應。 – Mahesh 2010-07-06 08:46:18

+0

您的服務器似乎將自己用作DNS服務器(但未按其外觀運行DNS服務)。它可能在其本地主機文件中包含客戶端詳細信息。另一方面,您的客戶端配置爲使用ns.murphx.net作爲DNS服務器,但該服務器不知道acf-pc。你需要理清你的DNS服務器應該在哪裏,配置機器來使用它們,並確保你的所有機器都在該DNS中註冊。或者,爲了測試,我給出了關於如何設置本地DNS轉換的鏈接,以便不需要DNS服務器。 – paxdiablo 2010-07-06 09:00:49

1

你可以使用C函數的getaddrinfo()來獲取數字地址 - IPv4和IPv6。 請參閱示例代碼here

0

Windows XP具有Windows防火牆,如果配置不正確,可能會干擾網絡通信。如果您擁有管理員權限,則可以通過控制面板訪問Windows防火牆小程序來關閉Windows防火牆。如果您的應用程序在關閉Windows防火牆的情況下運行,那麼問題可能是由於防火牆的設置所致。

我們有它運行在多臺PC上使用UDP/IP通信的應用,我們一直在做實驗,以便應用程序能與誰沒有管理員權限的用戶在PC上運行。爲了讓我們的應用程序在多臺PC之間進行通信,我們必須使用管理員帳戶來修改Windows防火牆設置。

在我們的應用中,一個PC被指定爲服務器和其他的都是客戶端服務器/客戶端組中,並有可能在同一子網幾組。

第一個變化是使用Windows防火牆小程序的例外選項卡的功能,以創建我們用來通信的端口例外。

我們正在使用主機名稱查找,以便客戶端可以通過使用計算機名稱來定位其分配的服務器,該計算機名稱由帶有破折號的助記符前綴和後接分配的終端號(例如SERVER100-1)組成。這允許多臺服務器及其分配的客戶端在同一子網上共存。客戶端使用其前綴爲分配的服務器生成計算機名稱,然後使用主機名稱查找來發現分配的服務器的IP地址。

我們發現,除非服務器PC的Windows防火牆啓用了文件和打印機共享服務端口,否則使用計算機名稱(通過「系統屬性」對話框的「計算機名稱」選項卡分配)的主機名稱查找將不起作用。

所以我們不得不做出兩個改變:(1)設置爲我們用於通信和(2)啓用文件和打印機服務例外選項卡中允許的主機名查找端口例外。

**編輯**

您也可以找到這個Microsoft Knowledge Base article on helpful on Windows XP networking

而且看到這個article on NETBIOS name resolution in Windows

1

嘗試使用tracert來解析主機名。 IE你有IP地址8.8.8.8所以你會使用; tracert 8.8.8.8

+1

這也是相反的。 IE,你使用tracert facebook.com來獲取Facebook服務器的IP地址。 – 2016-03-18 04:42:52