2010-03-12 14 views
1

J'écris des clients en Java qui stockent les données sur un serveur de base de données. Jusqu'à présent, l'adresse IP et le port du serveur doivent être spécifiés manuellement dans les paramètres du client. J'ai entendu, qu'il est possible de déterminer automatiquement l'adresse IP des serveurs de base de données via broadcast/multicast/UDP (je ne suis pas familier avec ces concepts). Question: Existe-t-il un moyen de récupérer les adresses IP de tous les serveurs de bases de données disponibles sur le réseau local? Je travaille avec le système de base de données h2 jusqu'ici.Comment déterminer l'IP du serveur de base de données via UDP en Java

Bye, Wolfgang

Répondre

1

diffusions UDP sur les serveurs de base de données :) Cela vous permettra de choisir la diffusion sur toutes les machines sur le réseau local et les émissions elles-mêmes peuvent porter l'adresse IP des serveurs . Pour obtenir l'adresse IP locale, utilisez InetAddress ip = InetAddress.getLocalHost();

De http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramSocket.html:

diffusions UDP envoie des sont toujours activés sur un DatagramSocket. Pour recevoir des paquets de diffusion, un DatagramSocket doit être lié à l'adresse générique. Dans certaines implémentations, des paquets de diffusion peuvent également être reçus lorsqu'un DatagramSocket est lié à une adresse plus spécifique.

Exemple: DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888)); ce qui équivaut à: DatagramSocket s = new DatagramSocket(8888); Les deux cas vont créer un DatagramSocket capable de recevoir des émissions sur le port UDP 8888.

Edit: vous pourriez doigt aussi toutes les adresses IP sur le réseau; utilisez l'algorithme au http://www.linglom.com/2007/02/20/how-to-find-subnet-number-ip-addresses-in-the-subnet-in-a-few-seconds/ pour calculer les adresses IP des sous-réseaux, parcourez-les et testez chacun d'eux en tant que serveur H2 (essayez de vous connecter). Vous souhaiterez peut-être plusieurs threads pour accélérer la découverte.