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

Entrée/Sortie Java Discussion :

Socket + IP + Routeur + OS différents = catastrophe


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Par défaut Socket + IP + Routeur + OS différents = catastrophe
    Bonjour,

    Ca va faire quelques jours que j'essaye de connecter deux ordinateurs distants sans y arriver. Un PC est sous Windows et est connecté à Internet via un routeur, l'autre ordinateur est sous Ubuntu et utilise également un routeur pour se connecter.

    Tout d'abord récupérer l'ip n'est pas une chose facile, la méthode la plus fréquente ne renvoie pas le bon résultat et donne des résultats différents:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    InetAddress IP = InetAddress.getLocalHost();
    String ip = IP.getHostAddress();
    Sur Ubuntu, l'ip reçue est 127.0.1.1
    Sur Win XP: 192.168.1.40

    Donc j'ai l'ip local dans un cas, l'ip du réseau attribuée par le routeur dans l'autre cas. Pour pouvoir connecter deux PC entre eux à distance, il me faut l'ip fournie par le provider.

    Pour cela, je récupère l'ip via un site web (qui contient un script php qui retourne l'ip du visiteur). L'ip reçue est bien la bonne, mais l'ip est la même pour tout les PC du réseau !

    Quand on essaye cette méthode en local, il retourne connection refused et avec des PC distants, le programme freeze.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //côté client
    Socket client;
    try{
       client = new Socket(IP,Port);
    }
    catch(Exceptione){System.err......;}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //côté serveur
    ServerSocket server;
    server = new ServerSocket(8080);
    Socket clientSocket = null;
    clientSocket = server.accept();
    JOptionPane.showMessageDialog(null,"Un nouveau client est connecté, son ip: "+clientSocket.getInetAddress().toString(),"",JOptionPane.INFORMATION_MESSAGE);
    clientSocket.close()
    Comment pourrais-je faire pour que ca se connecte dans tout les cas de figure? (OS différents, routeur, plusieurs ordinateurs connectés/routeur).

    Merci par avance pour votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Je pense qu'il va te falloir rediriger les ports ...

    Tu récupères les 2 ips wan (grâce a ton script)
    Le serveur écoute sur un port précis, tu redirige donc ce port vers la machine qui a le serveur.
    Sur le routeur ou se connecte le client tu rediriges le port vers la machine avec Ubuntu ... et ça devrait fonctionner avec les ips wan.


    >> Je ne suis pas certain que tu sois obligé de rediriger le port pour le client, il me semble (mais mes connaissances en réseau sont limitées) que si la requête est envoyée par le client, la réponse est automatiquement acceptée et redirigée ... Mais bon je n'en suis pas sûr du tout !

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par v4np13 Voir le message
    Ca va faire quelques jours que j'essaye de connecter deux ordinateurs distants sans y arriver. Un PC est sous Windows et est connecté à Internet via un routeur, l'autre ordinateur est sous Ubuntu et utilise également un routeur pour se connecter.
    Les deux PC sont sur le même réseau ou tu dois passer par Internet ?

    Citation Envoyé par v4np13 Voir le message
    Donc j'ai l'ip local dans un cas, l'ip du réseau attribuée par le routeur dans l'autre cas. Pour pouvoir connecter deux PC entre eux à distance, il me faut l'ip fournie par le provider.
    Le problème c'est qu'une machine peut avoir plusieurs adresse IP...
    Le mieux serait de passer par les NetworkInterface pour les récupérer toutes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
    		while (interfaces.hasMoreElements()) {
    			NetworkInterface ni = (NetworkInterface) interfaces.nextElement();
     
    			// On affiche le nom de l'interface :
    			System.out.println(ni.getName() + " : " + ni.getDisplayName());
     
    			Enumeration<InetAddress> addresses = ni.getInetAddresses();
    			while (addresses.hasMoreElements()) {
    				InetAddress address = (InetAddress) addresses.nextElement();
    				System.out.println("\t" + address.getHostAddress());
    			}
    		}
    Citation Envoyé par v4np13 Voir le message
    Pour cela, je récupère l'ip via un site web (qui contient un script php qui retourne l'ip du visiteur). L'ip reçue est bien la bonne, mais l'ip est la même pour tout les PC du réseau !
    Si tu es derrière un routeur NAT c'est tout à fait normal (car justement un routeur NAT permet de partager une même adresse publique).


    En général les routeurs NAT ne permettent que de "sortir" (ie : les machines au sein du réseau privée peuvent se connecter à "l'extérieur", mais des machines de "l'extérieur" ne peuvent pas s'y connecter).

    Il faut donc configurer le routeur pour lui indiquer comment les applications externes font pour "attaquer" une machine interne (en lui associant un port, par exemple le port 80 du routeur renvoit vers le port 80 d'une machine bien spécifique).

    Je crois qu'il est possible de faire cela dynamiquement (via UPNP je crois) mais j'ignore le fonctionnement exact...


    a++

  4. #4
    Membre éclairé
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Par défaut
    Au départ, on comptait le faire avec des ordinateurs distants sur des réseaux différents. Mais on va s'arranger pour le faire sur le même réseau, ça devrait retirer un niveau de difficulté.

    Faudrais que je puisse récupérer l'ip 192.168.0.4 sur Ubuntu aussi, ce qui n'est pas le cas pour le moment. Comment pourrais-je faire?

    J'avais vu le code avec le NetworkInterface dans la faq, mais c'est trop compliqué pour moi.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/10/2010, 10h27
  2. Réponses: 1
    Dernier message: 31/05/2009, 23h36
  3. Socket et routeur
    Par DassaultMirage2000 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 01/06/2008, 09h29
  4. Questions avec les sockets et routeurs
    Par Nico128 dans le forum WinDev
    Réponses: 2
    Dernier message: 28/01/2008, 18h58
  5. [Routeur/Socket] Connection Client/Serveur
    Par Clorish dans le forum Développement
    Réponses: 3
    Dernier message: 17/12/2003, 13h45

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