getLocalAddress() pour retourner 0.0.0.0
Je suis en train d'écrire un programme utilisant des Sockets et j'ai besoin d'avoir mon propre adresse IP locale.
Lorsque j'utilise getLocalAddress dans le support, je ne reçois 0.0.0.0.
Voici un petit morceau de mon code:
DatagramSocket socket;
DatagramPacket pacoteEnvio = new DatagramPacket(msgByte, msgByte.length, addr, 6500);
socket = new DatagramSocket();
System.out.println("Local address = " + socket.getLocalAddress());
socket.send(pacoteEnvio);
Avez-vous une idée?
Je suis en utilisant UDP, donc je ne suis pas sûr si je peux obtenir mon IP de cette façon parce que c'est sans connexion, mais je pense que vous pouvez m'aider!
- Votre support n'est pas lié, ce qui explique l'0 0 0 0 adresse
- J'ai essayé de respecter un essai, mais j'ai le message: C'est déjà lié..
Vous devez vous connecter pour publier un commentaire.
Obtenir l'adresse locale à l'aide de mécanismes comme cela a généralement ne fonctionne pas de la façon que vous attendez. Un système a généralement au moins deux adresses -
127.0.0.1
etip address of nic
, lorsque vous lier à une adresse pour l'écoute, vous êtes en liaison INADDR_ANY, qui est la même que l'adresse0.0.0.0
qui est la même que la liaison à127.0.0.1
etip address of nic
. Considérons un ordinateur portable avec une connexion filaire et sans fil carte réseau - une ou l'autre ou les deux d'entre eux pourraient être connectés en même temps. Ce qui serait considéré comme l'adresse IP du système dans ce cas?J'ai volé un sous-ensemble de la réponse à la énumérer les adresses ip de tous les permis de cartes NIC, qui traite avec les adresses de toutes les cartes réseau, qui répertorie les adresses IP de toutes les interfaces, sur mon système, j'ai 10 interfaces, donc je me retrouve avec un lot d'adresses IP.
En général, mais si vous êtes serveur de programmation, lorsque vous recevez un paquet sur un UDP service, il contient l'adresse IP de l'expéditeur, que vous simplement envoyer la réponse à, et l'ordinateur est assez intelligent pour envoyer de la bonne interface réseau.
Je suis en train de travailler sur un projet similaire, - un bellford homme de projet du client. J'ai essayé votre chemin à la première et a obtenu 0.0.0.0 trop. Puis j'ai pensé à elle en utilisant simplement une méthode de InetAddress à la sortie de la traiter comme une chaîne sans impliquer le socket datagramme.
Et j'ai affiché mon IP interne - l'IP attribuée mon routeur. Ce qui était suffisant pour moi. Espérons que cette aide.
Vous pouvez essayer :
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/DatagramSocket.html
La javadoc de
DatagramSocket.getLocalAddress()
dit ceSi vous créez un
DatagramSocket
à l'aide de la non-args constructeur, vous obtenez une prise qui n'est pas lié, et par conséquent (par la javadoc)getLocalAddress()
doit retourner le générique de l'adresse IP0.0.0.0
. Et il le fait.Il est surprenant ce qu'on peut apprendre par la lecture de la documentation 🙂
Tandis que le DatagramSocket n'est pas connecté, il n'a pas lier un port sur la machine locale, il est donc IP est 0.0.0.0 . Essayez de faire la connexion avec
socket.connect(SocketAddress addr)
et alors vous obtiendrez les meilleurs résultats. Vous obtiendrez la même 0.0.0.0 adresse ip aprèssocket.disconnect()
méthode.