Поиск и подключение к локальному серверу (C-программирование) - PullRequest
1 голос
/ 28 февраля 2012

Я занимаюсь программированием сокетов на C, где у меня есть один сервер и много клиентов в локальной сети. Я хочу, чтобы клиент сам находил (ищет) сервер в сети (т. Е. Не указывал адрес сервера) и подключался к нему. Протокол между клиентами и сервером должен быть TCP.

Я какое-то время искал в Интернете, чтобы найти хорошее решение, но пока не нашел.

Буду очень признателен за любые предложения о том, как мне решить эту проблему.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

IP-адрес и номер порта необходимы для подключения клиента к игровому серверу.Однако, если IP-адрес сервера недоступен, «компромисс» может быть достигнут:

  • Используя имя хоста для подключения к серверу, вы можете использовать gethostbyname() для разрешения имени хоста.и получите IP-адрес.Это должно решить проблему, если IP-адрес сервера неизвестен или не является статическим.
  • Наличие процесса, работающего на известном IP, который может предоставить вам список активных серверов.
  • Клиенты просматривают определенный диапазон IP-адресов вместо попытки подключиться к одному IP (не очень хорошая идея, но должна выполняться в локальной сети).
  • Передача пакетов вашего сервера (скажем, UDP-датаграммы) через фиксированные интервалы ко всем хостам в текущей подсети (опять же, не очень хорошая идея, приведет к ненужному сетевому трафику).

Можно также использовать гибридный подход с более чем одним из вышеперечисленных, например, попытаться подключиться через имя хоста и, если это не удастся, вернуться к подключению к известному IP со списком активных серверов и т. Д.

0 голосов
/ 28 февраля 2012

Если у вас есть контроль над сетевым макетом и тому подобное, я бы использовал решение, включающее DHCP и DNS.

По сути, вы хотите подключить ваш DHCP-сервер к вашему DNS-серверу, чтобы он автоматически создавал записи для новых компьютеров в сети. Эта функция поддерживается большинством DHCP-серверов и DNS-серверов, включая BIND и named, а также решение Microsoft.

Затем вы зададите для имени хоста сервера какое-то известное значение и попросите клиентов найти сервер с помощью DNS. То есть gethostbyname() будет работать должным образом, чтобы вы могли использовать первую точку, предложенную в ответе Бхаргава.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...