IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Réseau] "cannot assign requested address" sur ma propre IP


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [Réseau] "cannot assign requested address" sur ma propre IP
    Plop à tous

    Alors voilà, je cherche à établir un serveur monothread sur ma machine grâce aux (Server)SocketChannels. Sauf que, lorsque je bind le ServerSocketChannel instancié, le débogueur m'insulte... assez inintelligiblement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    java.net.BindException: Cannot assign requested address: bind
    	at sun.nio.ch.Net.bind0(Native Method)
    	at sun.nio.ch.Net.bind(Unknown Source)
    	at sun.nio.ch.Net.bind(Unknown Source)
    	at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
    	at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
    	at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
    	at net.evenkoryis.technics.ServThread.<init>(ServThread.java:31)
    	at net.evenkoryis.technics.MpServ.<init>(MpServ.java:6)
    	at net.evenkoryis.main.Main.mpMenu(Main.java:88)
    	at net.evenkoryis.main.Main.mainMenu(Main.java:46)
    	at net.evenkoryis.main.Main.main(Main.java:12)
    Voici la ligne du bind, précédée de la récupération de mon IPv4 Internet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Socket s = new Socket("monip.org", 80);
    s.getOutputStream().write("GET / HTTP/1.1\nHost: monip.org\n\n".getBytes());
    // Envoi de requête HTTP à www.monip.org
     
    byte[] b = new byte[2048];
    int rc = s.getInputStream().read(b);
    s.close();
    // Récupération des données et fermeture du Socket employé
     
    String straddr = new String(b, 0, rc).split("IP : ")[1].split("<br>")[0];
    // straddr contient l'IP sous forme de chaîne de caractères
     
    this.sv.socket().bind(new InetSocketAddress(InetAddress.getByName(straddr), 32740));
    // sv est un attribut ServerSocketChannel
    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    Je ne comprends pas le principe d'aller récupérer son ip via une requête http !?!
    Un bind server doit ce faire sur un interface local. Donc si il n'y a qu'une interface réseau sur la machine, un InetAddress.getLocalHost() est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.sv.socket().bind(new InetSocketAddress(InetAddress.getLocalHost(), 32740));

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jdevbe Voir le message
    Je ne comprends pas le principe d'aller récupérer son ip via une requête http !?!
    Un bind server doit ce faire sur un interface local. Donc si il n'y a qu'une interface réseau sur la machine, un InetAddress.getLocalHost() est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.sv.socket().bind(new InetSocketAddress(InetAddress.getLocalHost(), 32740));
    Merci, mais est-ce qu'un client hors de mon réseau local pourra se connecter à mon serveur? C'est de cette question que m'est venue l'idée de la requête HTTP...

  4. #4
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    est-ce qu'un client hors de mon réseau local pourra se connecter à mon serveur?
    Cela c'est un problème de config de l'équipement réseau pas de programmation java...
    En gros, il faut que
    1) le client puisse obtenir votre adresse IP publique (celle attribuée par votre fournisseur internet). Voir service dyndns ou autre.
    2) Comme L'ip publique ne corresponds sans doute pas directement à une interface réseau du serveur lequel tourne le service (votre programme), il faut translatée un port de votre routeur d'accès à internet vers le port et l'ip privée du serveur lequel tourne le service.

  5. #5
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jdevbe Voir le message
    1) le client puisse obtenir votre adresse IP publique (celle attribuée par votre fournisseur internet). Voir service dyndns ou autre.
    Suffirait que j'affiche ma variable straddr, non?
    Citation Envoyé par jdevbe Voir le message
    2) Comme L'ip publique ne corresponds sans doute pas directement à une interface réseau du serveur lequel tourne le service (votre programme), il faut translatée un port de votre routeur d'accès à internet vers le port et l'ip privée du serveur lequel tourne le service.
    Si j'ai bien compris, chaque fois que quelqu'un voudra utiliser la partie "serveur" de mon programme, il devra passer par un port forwarding?

Discussions similaires

  1. RTNETLINK answers: cannot assign requested address
    Par euroval dans le forum Réseau
    Réponses: 0
    Dernier message: 08/04/2012, 15h13
  2. Réponses: 0
    Dernier message: 07/07/2009, 10h06
  3. Perde et retrouver le lien réseau: Unable to complete request...
    Par Régent dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 15/05/2006, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo