De trouver le serveur à l'écoute sur un port spécifique sur le réseau local
J'ai un serveur d'application. J'ai aussi une application client. Je suis en mesure d'établir une connexion tcp entre les applications lorsque les deux applications se trouvent sur le même réseau. donc, disons que l'ordinateur exécutant le serveur d'applications est à l'écoute de nouvelles connexions sur le port 2121 et il a l'adresse ip LAN 192.168.0.120. Sur un autre ordinateur exécutant l'application cliente, je vais être en mesure d'établir une connexion en fournissant le numéro de port 2121 et l'adresse ip 192.168.0.120.
Est-il un moyen de trouver tous les ordinateurs sur un réseau qui sont à l'écoute sur le port 2121?
Un algorithme que je pense maintenant, c'est comme:
-
obtenir l'adresse ip de l'ordinateur actuel et permet de dire qu'il ne sort qu'à 192.168.0.145.
-
maintenant plus probable que le serveur sera à l'écoute sur l'adresse ip 192.168.0.?
-
puis ping 192.168.0.1 sur le port 2121 puis 192.168.0.2 sur le port 2121 ... et puis continuer.
Je ne sais pas si cette méthode est efficace. en outre, il pourrait y avoir une possibilité que le serveur arrive à être à l'écoute sur l'adresse ip 192.168.1.x
Donc quels changements je dois faire pour mon serveur et client de l'application, de sorte que le client est en mesure de trouver tous les serveurs à l'écoute sur le port 2121?
Pourquoi voulez-vous trouver tous les serveurs? Pourquoi avez-vous encore besoin de plus d'un? En raison de l'équilibrage de charge? Ou comme une copie de sauvegarde, lorsque l'un d'eux est en panne?
J'ai cette application là où je suis en mesure de synchroniser des fichiers entre ordinateurs. peut-être que quelqu'un d'autre utilise mon application et de deux serveurs sont sur le même réseau. J'ai juste envie de faire simple pour que les utilisateurs soient en mesure de localiser le serveur...
OriginalL'auteur Tono Nam | 2011-09-02
Vous devez vous connecter pour publier un commentaire.
De l'algorithme proposé est celui dont vous avez besoin. Un problème est dans la dynamique de la génération du candidat adresses IP.
Normalement, possibles plage d'adresses IP est celle donnée par le masque de sous-réseau ( http://en.wikipedia.org/wiki/Subnetwork ). Plus exactement, la partie de la propriété intellectuelle que le changement est la partie lorsque dans le masque de sous-réseau que vous avez 0bits (toujours à la fin de masque).
Dans votre exemple:
192.168.0.*.
La seule d'autres possibilités qui cause votre problème que je vois à avoir ces gammes distinctes:
Pour en revenir au problème de trouver le problème du contrôle si "quelque chose" est en écoute sur un port spécifique, le protocole ICMP n'est pas le meilleur ici, comme la majorité des pare-feu filtre à la fois à l'émission ICMP et unique ICMP. Si nous sommes vraiment parler d'un serveur, les chances sont que vous avez eu à ouvrir manuellement le port que vous recherchez. Aussi, même si tous les ordinateurs de répondre, vous ne savez toujours pas si ils l'hôte de votre voulions un service.
La solution ci-dessous implique le calcul de l'intervalle du candidat, les adresses IP. Après que vous parcourir pour voir si vous pouvez vous connecter à votre port.
Dans cette mise en œuvre, je l'ai tester de manière séquentielle, ce qui s'avère être très lent que le délai d'attente pour se connecter est de 30 secondes si l'hôte n'est pas sur. Pour plusieurs centaines de candidats, il n'a pas l'air trop bonne. Toutefois, si la majorité de l'hôte sont disponibles (même s'ils ne sont pas d'accueil à votre service), tout ira plusieurs fois plus rapide.
Vous pouvez améliorer le programme par trouver comment faire pour diminuer ce délai (je ne pouvais pas trouver comment dans mon temps alloué) ou à utiliser un délai tel que présenté dans Comment configurer socket délai de connexion . Vous pouvez également utiliser le multi-threading et ajout de l'adresse qui a travaillé dans un "thread-safe" de collecte et de travailler avec elle à partir de là.
Aussi, vous pouvez essayer la commande ping (ICMP) avant, mais vous risquez de rater valable serveurs.
OriginalL'auteur TDRv2.1
(désolé pour mon mauvais anglais) je suis réellement besoin de quelque chose de semblable à cela et juste trouvé à propos de la multidiffusion. Ici vous pouvez trouver un article et l'exemple. L'exemple d'application de l'article a bien fonctionné sur mon lan. Je ne sais pas exactement comment cela fonctionne, mais peut-être que vous pouvez multidiffusion quelque chose de la part du client et le serveur(s) à répondre avec son IP? Ou si cela ne fonctionne pas, le serveur la multidiffusion son IP dans un intervalle régulier devrait le faire. Désolé pour le manque d'informations, je viens d'apprendre à ce sujet 🙂
OriginalL'auteur Leo
Une option que je ne suis pas le voir être discuté ici est d'avoir un Serveur Maître.
L'idée est assez simple: Un serveur sur lequel votre serveur d'application peut s'inscrire et où vous application les clients peuvent obtenir une liste de serveurs actifs.
Choses à garder à l'esprit:
Si un serveur est aussi bonne que les autres pour votre application, je vous conseille la liste à être commandés en fonction de l'horodatage de la dernière bonjour message reçu à partir de ce serveur - client aura au sommet de cette liste, le serveur le plus likelly pour toujours (depuis il a déclaré être dernier) et peut aller en bas de la liste subsequentially.
De plus, à chaque fois que le Serveur Maître reçoit un bonjour que les modifications de la liste, de sorte que chaque tellement souvent des demandes du client obtiendra un autre serveur de la liste et utilisez un autre preferencial serveur, le soulagement de la charge sur les serveurs à travers le conseil d'administration.
OriginalL'auteur 537mfb
vous pouvez pas utiliser la même méthode que lorsque vous obtenez votre ip.
permettent au client d'envoyer une diffusion si aucune réponse n'attendez
de réception du serveur de diffusion et d'envoyer l'une de retour avec sa propre ip.
maintenant savoir au client que le serveur est là, et sur quelle adresse ip.
OriginalL'auteur WindWalker
Je suppose que vous avez un serveur unique. Si vous pouvez garantir que l'emplacement du serveur (adresse ip et port) est constante (ou peut être regardé) puis chaque application client peut s'inscrire avec le serveur en se connectant à elle et à informer le serveur à propos de l'adresse ip et le port local de retour d'appel.
OriginalL'auteur Philipp Schmid
Ping ICMP ne permet pas de déterminer si un ordinateur est à l'écoute sur un port spécifique, uniquement si l'ordinateur est configuré pour réponse à un ping. ICMP est un protocole différent, alors le protocole TCP ou UDP. C'est seulement l'utiliser pour vous serait de déterminer si une Adresse IP est l'utilisation, et même alors, devient de moins en moins viable.
Vous avez deux options.
Demander au client de vérifier en permanence à toutes les adresses IP sur votre réseau local et essayer d'ouvrir le port 2121. Ce n'est pas une bonne option.
Ont chaque serveur d'envoyer un ping ICMP à l'adresse de diffusion de données spécifiques à l'annonce est sur (et éventuellement ne pas connecté à un client) jamais de temps en temps (je recommande une minute pour les tests, et à 5 minutes minimum pour la production). Tous vos logiciels de a à faire est de regarder pour la diffusion de ping et de se connecter à l'Adresse IP d'envoi.
Mise à jour:
Beaucoup de désinformation ici. ICMP n'est pas de devenir " moins viables, tous tous, c'est juste fantastique: il a beaucoup utilisations qui en sont les parties essentielles de la PTF/IP. Il est en fait pas une telle chose comme "ping ICMP': il est construit sur d'autres ICMP fonctionnalités. Et il y a beaucoup plus d'options, y compris UDP multicast et broadcast, un Registre central, mappeur de port, ...
Je crois que j'aurais dit que c'est moins viable pour ce que l'OP veut (mais j'ai l'habitude d'assumer les gens post pour donner de l'information au sujet de la question posée). Il n'y a aucune raison pour moi de publier des informations qui ne sont pas pertinents pour la Fpo a besoin, comme d'autres choses que le protocole ICMP peut faire. Je vais mettre à jour le post.
OriginalL'auteur Erik Philips
vous pouvez apporter au serveur d'envoyer son emplacement à un port spécifique en utilisant UDP, et le client, l'écouter, le client établit une connexion avec le serveur en fonction de l'adresse ip et le port.
OriginalL'auteur MEYWD