2010-07-06 3 views
30

Я разработал приложение для моделирования клиент-сервер. Я развернул клиент и сервер на двух разных машинах Windows XP. Так или иначе, клиент не может отправлять запросы на сервер.Устранение имени хоста до IP-адреса

Я попытался ниже вариантов:

  1. пингуемой машина сервера успешно от клиента с помощью IP-адрес.

  2. Pinged client machine успешно с сервера, используя ip-адрес.

  3. Проверен инструмент командной строки netstat с обеих машин. Сервер находится в LISTENING режиме и клиент находится в SYS_SENT режиме. Но чужой адрес, который он использует для отправки, - это имя хоста, а не ip-адрес.

  4. Pinged server machine безуспешно использует имя хоста от клиента.

  5. Pinged client machine успешно использует имя хоста с сервера.

Я чувствую, что проблема заключается в том, что клиент пытается подключиться к серверу с использованием имени хоста.

Не могли бы вы указать, как заставить приложение использовать IP-адрес вместо имени хоста? Есть ли другой способ сопоставить имя хоста с IP-адресом?

+0

В какой библиотеке вы используете? inet_addr может быть вам полезна? http://msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx – Patrick

ответ

0

Трудно ответить без дополнительной информации о сетевой архитектуре. Некоторые вещи для расследования:

  • Возможно ли, что клиент и/или сервер находятся за устройством NAT, брандмауэром или аналогичным?
  • Является ли какой-либо из IP-адресов «локальным» адресом, например 192.168.x.y или 10.x.y.z?
  • Каковы имена хостов, являются ли они «настоящими» DNS: именами или чем-то более локальными и/или специфичными для Windows?
  • Как клиент ищет сервер? Должно быть место в кодовых или конфигурационных данных, содержащих имя хоста, вместо этого попробуйте вместо этого использовать IP, если вы хотите избежать поиска.
+0

Спасибо за ваш ответ. IP-адреса являются локальными, они начинаются с 192.168.x.y. Имена DNS более локальны для машины. Я даю IP-адрес приложению, но каким-то образом он использует имя хоста при отправке данных на сервер (идентифицируется с использованием внешнего адреса netstat). – Mahesh

38

Перейти к клиентской машине и введите:

nslookup server.company.com 

заменяя реальное имя хоста вашего сервера для server.company.com, конечно.

Это должно указать вам, какой DNS-сервер использует ваш клиент (если есть), и что он думает о проблеме с именем.

К приложение приложение для использования IP-адреса, как правило, вы просто настраиваете его на использование IP-адреса вместо имени хоста. Если имя хоста жестко запрограммировано или приложение настаивает на использовании имени хоста, предпочитая IP-адрес (как показывает один из ваших других комментариев), тогда вам, вероятно, не повезло.

Однако, вы можете изменить способ, которым большинство машина разрешить имена хостов, например, с /etc/resolv.conf и /etc/hosts на системах UNIXy и a local hosts file на Windows, у систем.

+0

Я пробовал nslookup как на клиенте, так и на сервере. клиент: ----------------- Nslookup клиент-ПК Сервер: ns.murphx.net Адрес: 62.69.62.6 ** ns.murphx. net не может найти acf-pc: несуществующий домен. такой же ответ когда я сделал nslookup сервер-компьютер. Сервер: --------- nslookup client-pc *** Серверы по умолчанию недоступны. Сервер: нет данных Адрес: 127.0.0.1 nslookup server-pc *** Серверы по умолчанию недоступны. Сервер: нет данных Адрес: 127.0.0.1 Истекло время ожидания DNS-запроса. таймаут составлял 2 секунды. *** Запрос на неизвестный тайм-аут. Тот же ответ, когда я сделал nslookup server-pc. – Mahesh

+0

Ваш сервер, по-видимому, использует себя как DNS-сервер (и, тем не менее, не выполняет службу DNS по внешнему виду). Это _may_ содержит сведения о клиенте в файле локальных хостов. С другой стороны, ваш клиент настроен на использование ns.murphx.net в качестве DNS-сервера, но этот сервер не знает об acf-pc. Вам нужно разобраться, где должны быть ваши DNS-серверы, настроить компьютеры для их использования и убедиться, что все ваши компьютеры зарегистрированы в этом DNS. В качестве альтернативы для тестирования, ссылаясь на эту ссылку, я дал, как настроить локальные DNS-переводы, чтобы DNS-сервер не нужен. – paxdiablo

1

Вы можете использовать функцию c getaddrinfo() для получения числового адреса - как ipv4, так и ipv6. См. Примерный код here

0

Windows XP имеет брандмауэр Windows, который может помешать сетевому трафику, если он не настроен должным образом. Вы можете отключить брандмауэр Windows, если у вас есть права администратора, путем доступа к апплетам брандмауэра Windows через панель управления. Если ваше приложение работает с брандмауэром Windows отключено, проблема, вероятно, связана с настройками брандмауэра.

У нас есть приложение, работающее на нескольких ПК, обменивающихся с использованием UDP/IP, и мы проводим эксперименты, чтобы приложение могло работать на ПК с пользователем, у которого нет прав администратора. Чтобы наше приложение обменивалось данными между несколькими ПК, нам пришлось использовать учетную запись администратора, чтобы изменить настройки брандмауэра Windows.

В нашем приложении один компьютер обозначен как сервер, а остальные клиенты в группе сервер/клиент, и в одной подсети может быть несколько групп.

Первое изменение состояло в том, чтобы использовать функциональность вкладки «Исключения» апплета Windows Firewall для создания исключения для порта, который мы используем для связи.

Мы используем поиск имени хоста, чтобы клиенты могли найти свой назначенный сервер, используя имя компьютера, которое составлено из мнемонического префикса с тире, за которым следует назначенный номер терминала (например, SERVER100-1). Это позволяет нескольким серверам с назначенными клиентами сосуществовать в одной подсети. Клиент использует свой префикс для генерации имени компьютера для назначенного сервера и последующего поиска имени узла для обнаружения IP-адреса назначенного сервера.

Мы обнаружили, что поиск имени хоста с использованием имени компьютера (назначенного с помощью вкладки «Имя компьютера» диалогового окна «Свойства системы») не будет работать, если только брандмауэр Windows на сервере ПК не включил порт службы обмена файлами и принтером.

Итак, мы должны были сделать два изменения: (1) установить исключение для порта, который мы использовали для связи, и (2) включить службу файлов и принтеров на вкладке «Исключения», чтобы разрешить поиск имени узла.

** EDIT **

Вы можете также найти эту 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, чтобы получить IP-адрес сервера Facebook. –

Смежные вопросы