2010-12-03 4 views
1

Мое приложение открывает сокет TCP и ждет данных от других пользователей в сети с использованием того же приложения. В то же время он может передавать данные на указанный хост в сети.Правильный способ публикации и поиска услуг в локальной сети с использованием Python

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

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

ответ

2

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

Это не является нелогичным.

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

Является ли Bonjour/ZeroConf правильным путем, чтобы выполнить это?

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

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

Это может быть удобно для небольших офисов и помещений.


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

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

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

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

  • Будет ли когда-либо будет причина для запуска более чем один «установки» вашего приложения в сети?
  • Всегда учитывайте последствия версий: один клиент более современен, чем другой, может ли он по-прежнему разговаривать друг с другом или, по крайней мере, изящно терпеть неудачу?
+0

Извините, моя ошибка. Я имел в виду, что данные не транслируются. Все эти ответы были действительно полезны благодаря ребятам. – egalano 2010-12-03 23:45:17

+0

Это оксюморон, а не отсутствие последовательности. Не-sequitur было бы сказать: «Я хочу общаться с одним конкретным хостом, поэтому я должен транслировать их всем». – Cubic 2013-04-21 14:59:13

2

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

0

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

0

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

<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.