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 :
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
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); } } }
(récupéré ici pour info)
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(); } } }
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.
Partager