Envoyé par
dinobogan
Ton serveur réceptionne un message, puis le retourne au client. Et quel est l'instruction suivante ? Il n'y en a pas. Donc le serveur s'arrête, c'est normal.
Tu dois faire une boucle (while par exemple, à toi de déterminer la condition d'arrêt) dans laquelle le serveur va recevoir et envoyer les messages.
Salut,
J'ai modifié le code précédent et le résultat est le suivant :
La classe ServeurUDP.java
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 73 74 75 76 77
| //package package_UDP;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ServeurUDP {
static int hostport = 8532;
static String hostname = "localhost";
static byte[] buffer ;
public static void envoi (String hostname, int hostport, byte[] buffer){
try{
InetAddress host_address = InetAddress.getByName(hostname);
DatagramSocket socket = new DatagramSocket();
DatagramPacket paquet = new DatagramPacket(buffer, buffer.length,host_address,hostport);
socket.send(paquet);
}catch(Exception e){
System.err.println("Erreur: "+e);
}
}
static public DatagramPacket reception (int hostport){
try{
DatagramSocket socket = new DatagramSocket(hostport);
// while(true){
DatagramPacket paquet = new DatagramPacket(new byte[512],512);
socket.receive(paquet);
System.out.println("Addresse Serveur:"+ paquet.getAddress());
System.out.println("Donnees recues :"+ new String(paquet.getData()));
return paquet;
//}
}catch(Exception e){
System.err.println("Erreur: "+e);
return null;
}
}
/* static public void reception (int hostport){
try{
DatagramSocket socket = new DatagramSocket(hostport);
while(true){
DatagramPacket paquet = new DatagramPacket(new byte[512],512);
socket.receive(paquet);
System.out.println("Contenu du paquet Addresse Serveur:"+ paquet.getAddress());
System.out.println("Contenu du paquet Donnees:"+ new String(paquet.getData()));
}
}catch(Exception e){
System.err.println("Erreur: "+e);
}
} */
public static void main(String[] args) throws IOException{
while(true){
//Reception du paquet
DatagramPacket paquet = reception(hostport); //pb:recupration du paquet pour le renvoyer au clientle serveur s arrete apres la first reception
//reception(hostport);
//envoi du paquet
hostname = paquet.getAddress().getHostAddress();
hostport = paquet.getPort();
buffer = paquet.getData();
envoi(hostname,hostport,buffer);
}
}
} |
La classe ClientUDP.java
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 73 74 75 76 77
| //package package_UDP;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ServeurUDP {
static int hostport = 8532;
static String hostname = "localhost";
static byte[] buffer ;
public static void envoi (String hostname, int hostport, byte[] buffer){
try{
InetAddress host_address = InetAddress.getByName(hostname);
DatagramSocket socket = new DatagramSocket();
DatagramPacket paquet = new DatagramPacket(buffer, buffer.length,host_address,hostport);
socket.send(paquet);
}catch(Exception e){
System.err.println("Erreur: "+e);
}
}
static public DatagramPacket reception (int hostport){
try{
DatagramSocket socket = new DatagramSocket(hostport);
// while(true){
DatagramPacket paquet = new DatagramPacket(new byte[512],512);
socket.receive(paquet);
System.out.println("Addresse Serveur:"+ paquet.getAddress());
System.out.println("Donnees recues :"+ new String(paquet.getData()));
return paquet;
//}
}catch(Exception e){
System.err.println("Erreur: "+e);
return null;
}
}
/* static public void reception (int hostport){
try{
DatagramSocket socket = new DatagramSocket(hostport);
while(true){
DatagramPacket paquet = new DatagramPacket(new byte[512],512);
socket.receive(paquet);
System.out.println("Contenu du paquet Addresse Serveur:"+ paquet.getAddress());
System.out.println("Contenu du paquet Donnees:"+ new String(paquet.getData()));
}
}catch(Exception e){
System.err.println("Erreur: "+e);
}
} */
public static void main(String[] args) throws IOException{
while(true){
//Reception du paquet
DatagramPacket paquet = reception(hostport); //pb:recupration du paquet pour le renvoyer au clientle serveur s arrete apres la first reception
//reception(hostport);
//envoi du paquet
hostname = paquet.getAddress().getHostAddress();
hostport = paquet.getPort();
buffer = paquet.getData();
envoi(hostname,hostport,buffer);
}
}
} |
Seulement lorsque j'exécute, la première itération se passe plus ou moins bien (l'envoi des données du serveur vers le client n'est pas effectué). L'erreur suivante se produit
Erreur:java.net.BindException: Address already in use : cannot bind Exception in thread "main" java.lang.NullPointerException at ServeurUDP.main(ServeurUDP.java:71
Par la suite le serveur s'arrête.
Merci beaucoup d'avance pour votre aide
Partager