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 !
Voilà ce que j'obtiens en ligne de commande :
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]+"}"); } } }
<C\ .....>java clientSerre2 192.168.0.21 5000
Entrez un message SVP :
getT
Send : {103,101,116,84,13,10}
Partager