2010-12-03 22 views
1

Mon application ouvre un socket TCP et attend les données d'autres utilisateurs du réseau utilisant la même application. En même temps, il peut diffuser des données vers un hôte spécifié sur le réseau.Bonne façon de publier et de rechercher des services sur un réseau local en utilisant Python

Actuellement, je dois saisir manuellement l'adresse IP de l'hôte de destination pour pouvoir envoyer des données. Je veux être en mesure de trouver une liste de tous les hôtes exécutant l'application et que l'utilisateur choisisse l'hôte sur lequel diffuser les données.

Est-ce que Bonjour/ZeroConf est la bonne voie à suivre? (Je voudrais le multi-plateforme OSX/Win/* Nix)

Répondre

2

il peut diffuser des données à un hôte spécifié sur le réseau

Ceci est un non sequitur.

Je présume que vous ne voulez pas vraiment dire diffuser, vous voulez dire Unicast ou simplement "envoyer"?

Est-ce que Bonjour/ZeroConf est la bonne voie pour y parvenir?

Cela dépend vraiment de votre environnement cible et de ce que votre application est destinée à faire. Comme le souligne Ignacio, vous devez installer le logiciel Apple sur Windows pour Zeroconf/mDNS pour fonctionner à l'heure actuelle.

Cela peut convenir pour un usage domestique/de petite taille.


Cependant les grands réseaux peuvent avoir couche 2 Multicast désactivée pour diverses raisons, à quel point votre application pourrait être en difficulté. Si vous voulez que cela fonctionne dans l'environnement de l'entreprise, une configuration est requise, mais cela ne doit pas être fait à la périphérie (dans les instances du client de l'application). Il peut s'agir d'une option DHCP ou d'enregistrements de service DNS. Dans ce cas, vous pouvez écrire un serveur interrogeable pour suivre les clients actifs, un peu comme BitTorrent Tracker.

Deux choses à prendre en compte lors de la conception de votre application en réseau:

  • Y aurait-il jamais raison de courir plus d'une « installation » de votre application sur un réseau?
  • Considérez toujours les implications de la gestion des versions: Un client est plus à jour qu'un autre, peuvent-ils encore se parler ou du moins échouer gracieusement?
+0

Désolé mon erreur. Je voulais dire envoyer des données non diffusées. Toutes ces réponses ont été très utiles, merci les gars. – egalano

+0

C'est un oxymore, pas un non-sequitur. Un non-sequitur aurait été de dire 'Je veux communiquer avec un hôte particulier, donc je dois diffuser à tous'. – Cubic

2

Zeroconf/DNS-SD est une excellente idée dans ce cas. Il est fourni par Bonjour sur OS X et Windows (mais doit être installé séparément ou dans le cadre d'un produit Apple sous Windows), et par Avahi sur FOSS * nix.

0

Je pense que ZeroConf est un très bon début. Vous pouvez trouver this document utile.

+0

Le lien nolonger fonctionne – Mausy5043

0

J'ai une liste sur une page Web, sympa si vous avez besoin de communications Internet.

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

Mon idée initiale était d'ajouter poinçonnage pare-feu et tout ça, mais je ne pouvais pas être dérangé trop des hôtes où l'utilisation d'adresses IP externes pour qu'il soit un problème ..

Mais je recommande vraiment Zeroconf, au moins si vous utilisez Linux + MacOSX, vous ne connaissez pas du tout Windows.