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 :

Client UDP en Java


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Client UDP en Java
    Bonjour à tous,
    Je suis une jeune étudiante en prépa, et pour un projet d'informatique, je dois développer un petit programme qui doit communiquer en UDP avec une serre pour lui envoyer des commandes telles que : "ouvre les fenêtres", "arrose", etc ..

    Mon prof m'a fournit la platine électronique déjà toute programmée, il ne me reste "plus qu'à" créer un client JAVA pour communiquer avec.
    Le protocole est le suivant : je lui envoie une chaîne de caractère en ASCII et elle me retourne la réponse en ASCII également.
    Exemple : j'envoie "getT", elle me retourne "Th182" (càd la température est de 18.2 degrés)
    J'ai testé avec le logiciel Network stuff et tout fonctionne parfaitement, la serre exécute bien mes ordres et me retourne bien ce qu'il faut !

    Le problème arrive quand il faut coder tout cela en Java ! J'ai jamais eu de cours sur le réseau en Java donc je me suis renseignée et je suis tombée sur tout ce qui est DatagramSocket, DatagramPacket, etc, je pense avoir à peu près compris !
    J'ai donc essayé de modifier un code trouvé dans la base de données de mon établissement pour qu'il envoie quelque chose en ASCII et récupère la réponse mais ça ne marche pas T.T Je pense qu'il n'y a pas de problème au niveau de la traduction de ma chaîne de caractère en bytes, j'obtiens bien ce que je veux, par contre ma serre ne reçoit jamais ce que je lui envoie (et donc ne me retourne jamais rien), par exemple si je lui demande d'allumer la lumière rien ne se passe ..

    Je vous mets mon code ci-dessus, peut être est-ce une erreur toute simple qui sait si l'un de vous pouvait éclairer ma lanterne je lui en serais grandement reconnaissante !!
    J'exécute ce code en ligne de commande en entrant en paramètres l'adresse IP et le port, je vous transmet après le code ce que j'obtient !!

    Egalement en pièce jointe je vous ai ajouté le protocole que m'a fournit mon prof

    Merci beaucoup !

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    import java.io.*;
     
    import java.net.*;
     
     
    public class clientSerre2 {
        public static void main(String[] args) {
            try {
                // Mise en place du socket d'accès réseau
                DatagramSocket socket = new DatagramSocket();
     
                // Définition des données d'identification du serveur
                int port = Integer.parseInt(args[1]);
                String IP=args[0];
                InetAddress address=InetAddress.getByName(IP);
     
     
     
                // Structure de donnée de réception et émission 
                final int MTU = 1500; // MTU = Maximum Transmission Unit : taille max prévue par les protocoles Wifi et Ethernet
                DatagramPacket packet;
     
     
                // Initialisation de la connexion et ouverture des flux d'entrée / sortie.
                BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
     
                while (true) {
                    // Lecture bloquante d'une ligne en invite ligne de commande
                    System.out.println("Entrez un message SVP : ");
                    String theLine = userInput.readLine();
                    if (theLine.equals(".")) break;
    				theLine = theLine + "\r\n";
                  byte[] data = theLine.getBytes("ASCII");
                    // émission vers le serveur de la valeur saisie 
                    System.out.println("Send : ");
                    afficheData(data,data.length);
                    packet= new DatagramPacket(data, data.length, address, port);
                    socket.send(packet);
     
                    // Lecture bloquante d'un octet sur le réseau et affichage de la valeur reçue. 
                    data = new byte[MTU];
     
                    packet= new DatagramPacket(data, MTU);
     
                    socket.receive(packet);
     
                    System.out.println("Received "+packet.getLength()+" bytes from "+packet.getAddress()+":"+packet.getPort());
                    afficheData(data,packet.getLength());
                    System.out.println();
                }
     
            // Traitement bien moche des différents cas d'erreur.
            } catch (Exception e){
              System.out.println("Erreur.");
              e.printStackTrace();
            }
        } 
     
     
        static void afficheData(byte[] data, int length){
            if(length==0) {
                System.out.println("   {}");
            } else {
                System.out.print("   {");
                for(int i=0 ; i<length-1 ; i++){
                    System.out.print(data[i]+", ");
                }
                System.out.println(data[length-1]+"}");
            }
        }
    }
    Voilà ce que j'obtiens en ligne de commande :
    <C\ .....>java clientSerre2 192.168.0.21 5000
    Entrez un message SVP :
    getT
    Send : {103,101,116,84,13,10}
    Images attachées Images attachées

  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
    A vue de pifomètre, le code m'a l'air correct. As-tu utilisé un outil genre wireshark pour confirmer que le programme java envoie bien le paquet? Est-ce que tu n'aurais pas interdit, dans ton firewall windows, à java d'effectuer des connexions réseau? Je ne suis pas sur que ce soit indispensable en UDP, mais est-ce que tu as essayé un appel à datagramSocket.bind(null) avant ton premier envoi? Enfin, si ta machine dispose de plusieurs IPs, peut-être faire un new DatagramSocket(localAddress) avec un localAddress qui correspond à l'ip ayant accès à la carte de contrôle.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour votre réponse rapide !
    Je vais essayer tout ça et reviendrai vers vous si besoin !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème client UDP Java, rien ne se passe
    Par antoinegehin dans le forum Java EE
    Réponses: 4
    Dernier message: 12/06/2014, 11h47
  2. programme client serveur mode TCP/UDP en java
    Par ouss01 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 03/04/2009, 09h05
  3. Client serveur UDP en JAVA
    Par caro_caro dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 29/09/2008, 22h16
  4. Réponses: 5
    Dernier message: 24/09/2005, 20h31

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