Правильный способ публикации и поиска сервисов в локальной сети с использованием Python

Мое приложение открывает сокет TCP и ждет данных от других пользователей в сети, использующих то же приложение. В то же время он может транслировать данные на указанный хост в сети.

В настоящее время мне нужно вручную ввести IP-адрес целевого хоста, чтобы иметь возможность отправлять данные. Я хочу иметь возможность найти список всех хостов, на которых запущено приложение, и чтобы пользователь мог выбрать, на какой хост передавать данные.

Является ли Bonjour/ZeroConf правильным путем для достижения этой цели? (Я бы хотел, чтобы он был кроссплатформенным для OSX/Win/*Nix)


person egalano    schedule 03.12.2010    source источник


Ответы (4)


он может передавать данные указанному хосту в сети

Это непоследовательность.

Я предполагаю, что вы на самом деле не имеете в виду трансляцию, вы имеете в виду Unicast или просто "отправить" ?

Является ли Bonjour/ZeroConf правильным путем для достижения этой цели?

Это действительно зависит от вашей целевой среды и того, для чего предназначено ваше приложение.

Как указывает Игнасио, вам нужно установить программное обеспечение Apple в Windows, чтобы Zeroconf/mDNS работал в данный момент.

Это может подойти для небольшого офиса/домашнего использования.


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

Если вы хотите, чтобы он работал в корпоративной среде, требуется некоторая настройка, но это не обязательно делать на периферии (в экземплярах клиента приложения).

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

Две вещи, которые следует учитывать при разработке сетевого приложения:

  • Будет ли когда-нибудь причина запускать более одной «установки» вашего приложения в сети?
  • Всегда учитывайте последствия управления версиями: один клиент более актуален, чем другой, могут ли они по-прежнему взаимодействовать друг с другом или, по крайней мере, корректно завершать работу?
person MattH    schedule 03.12.2010
comment
Извините моя ошибка. Я имел в виду отправлять данные, а не транслировать. Все эти ответы были действительно полезны, спасибо, ребята. - person egalano; 04.12.2010
comment
Это оксюморон, а не непоследовательность. Нелогично было бы сказать: «Я хочу общаться с одним конкретным хостом, поэтому я должен транслировать на все из них». - person Cubic; 21.04.2013

В этом случае Zeroconf/DNS-SD — отличная идея. Он предоставляется Bonjour в OS X и Windows (но должен быть установлен отдельно или как часть продукта Apple в Windows) и Avahi в FOSS *nix.

person Ignacio Vazquez-Abrams    schedule 03.12.2010

Я думаю, что ZeroConf — очень хорошее начало. Вы можете найти этот документ полезным.

person NPE    schedule 03.12.2010

У меня есть список на веб-странице, удобно, если вам нужна интернет-связь.

<dl_service updated="2010-12-03 11:55:40+01:00">
 <client name="internal" ip="10.0.23.234" external_ip="1.1.1.1"/> 
 <client name="bigone" ip="2.2.2.2" external_ip="2.2.2.2">
  <messsage type="connect" from="Bigone" to="internal" />
 </client> 
</dl_service>

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

Но я очень рекомендую Zeroconf, по крайней мере, если вы используете Linux + MacOSX, вообще не знаете о Windows.

person Erik Johansson    schedule 03.12.2010