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 :

UDP- Réponse non reçue


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 25
    Points : 17
    Points
    17
    Par défaut UDP- Réponse non reçue
    Bonsoir,

    Grace à ce tutoriel j'ai réussi à transformer mon vieux pc portable en serveur web.
    Du coup j'ai eu envie de le tester en UDP entre deux machines distances via ce simple code

    Serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import java.io.*;
    import java.net.*;
     
    public class TestServeurUDP {
     
      final static int port = 80;
      final static int taille = 1024;
      static byte buffer[] = new byte[taille];
     
      public static void main(String argv[]) throws Exception {
        DatagramSocket socket = new DatagramSocket(port);
        String donnees = "";
        String message = "";
        int taille = 0;
     
        System.out.println("Lancement du serveur");
        while (true) {
          DatagramPacket paquet = new DatagramPacket(buffer, buffer.length);
          DatagramPacket envoi = null;
          socket.receive(paquet);
     
          System.out.println("\n"+paquet.getAddress());
          taille = paquet.getLength();
          donnees = new String(paquet.getData(),0, taille);
          System.out.println("Donnees reçues = "+donnees);
     
          message = "Bonjour "+donnees;
          System.out.println("Donnees envoyees = "+message);
          envoi = new DatagramPacket(message.getBytes(), 
            message.length(), paquet.getAddress(), paquet.getPort());
          socket.send(envoi);
        }
      }
    }
    Client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import java.io.*;
    import java.net.*;
     
    public class TestClientUDP {
     
      final static int port = 80;
      final static int taille = 1024;
      static byte buffer[] = new byte[taille];
     
      public static void main(String argv[]) throws Exception {
        try {
          InetAddress serveur = InetAddress.getByName(argv[0]);
          int length = argv[1].length();
          byte buffer[] = argv[1].getBytes();
          DatagramSocket socket = new DatagramSocket();
          DatagramPacket donneesEmises = new DatagramPacket(buffer, length, serveur, port);
          DatagramPacket donneesRecues = new DatagramPacket(new byte[taille], taille);
     
          socket.setSoTimeout(30000);
          socket.send(donneesEmises);
          socket.receive(donneesRecues);
     
          System.out.println("Message : " + new String(donneesRecues.getData(), 
            0, donneesRecues.getLength()));
          System.out.println("de : " + donneesRecues.getAddress() + ":" + 
            donneesRecues.getPort());
        } catch (SocketTimeoutException ste) {
          System.out.println("Le delai pour la reponse a expire");
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
    (récupéré ici pour info)
    Au départ ça fonctionnait plutôt bien, sauf que depuis que j'ai redémarré le pc faisant office de serveur le client ne reçoit plus la réponse du serveur alors que je n'ai pas du pas du tout touché au code. En gros :
    - Je lance le serveur
    - Je lance le client avec en argument l'adresse et le message
    - Le serveur reçoit bien le message du client mais le client ne reçoit pas la réponse du serveur
    Et ce que je lance le code du client depuis une autre machine ou le pc exécutant le serveur lui même.

    Une idée.
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Le serveur et le client tournent sur la même machine pour tes tests?
    Que retournent getLocalAdress et getLocalPort sur ta socket client?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Pour getLocalAddress() j'obtiens toujours 0.0.0.0/0.0.0.0
    Et pour .getLocalPort() d'abord 560554, puis ce nombre augmente de 1 à chaque lancement.

    Edit : J'ai testé et ça fonctionne avec l'équivalent TCP, donc au pire je m'y mettrais.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Les machines sont sur le même réseau ou il y a du routage entre les deux?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Le même, mais le but final reste quand même de faire communiquer deux machines distantes.

Discussions similaires

  1. [AJAX] Réponse non reçue du serveur
    Par rafmos dans le forum AJAX
    Réponses: 12
    Dernier message: 17/08/2011, 14h52
  2. [Mail] pièces jointes non reçues sous hotmail et ovh
    Par sandddy dans le forum Langage
    Réponses: 5
    Dernier message: 19/11/2008, 12h37
  3. Clé de Delphi non reçue
    Par akkinaj dans le forum EDI
    Réponses: 3
    Dernier message: 09/07/2008, 10h12
  4. Socket udp, recvfrom non bloquant
    Par yellowboy dans le forum C++
    Réponses: 0
    Dernier message: 26/05/2008, 22h10
  5. Serveur HTTP, second réponse non renvoyée
    Par kobe1980 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 25/02/2007, 17h15

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