Client / Serveur Multithread
Bonjour à tous !
Débutant en Java je viens vers vous pour une petite question que je n'arrive pas a résoudre :
Je fais actuellement communiquer deux programmes java ultra basique pour tester la communication client/serveur en multithread. Seulement voilà, je souhaites qu'à chaque réception d'une "requête", mon serveur crée un nouveau Thread mais impossible de le faire.
Mon code coté serveur (deux classes) :
Code:
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
|
import java.io.*;
import java.net.*;
class ServeurUDP
{
public static void main(String args[]) throws Exception{
//while(true){
ServeurUDP serveurUDP = new ServeurUDP();
serveurUDP.ServeurUDP();
// }
}
public void ServeurUDP() throws Exception{
DatagramSocket serverSocket = new DatagramSocket(7777);
//while(true){
ThreadServeurUDP monThreadServeurUDP = new ThreadServeurUDP(serverSocket);
monThreadServeurUDP.start();
//}
}
} |
et
Code:
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
|
import java.io.*;
import java.net.*;
public class ThreadServeurUDP extends Thread
{
DatagramSocket serverSocket;
public ThreadServeurUDP(DatagramSocket pserverSocket){
try{
serverSocket = pserverSocket;
}
catch(Exception e){}
}
public void run(){
try{
//DatagramSocket serverSocket = new DatagramSocket(7777);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
receiveData = new byte[1024];
sendData = new byte[1024];
// on créer un datagrampacket
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String message = new String( receivePacket.getData());
int port = receivePacket.getPort();
System.out.println("Chaine recue de UDP :" + port + " : " + message.trim());
System.out.println(" --- Thread serv name: " + this.getName() + " - " );
System.out.println(" --- Thread serv state1 : " + this.getState() + " - " );
InetAddress IPAddress = receivePacket.getAddress();
String reponsemessage = message.trim();
sendData = reponsemessage.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
System.out.println(" --- Thread serv state2 : " + this.getState() + " - " );
}
}
catch(Exception e){}
}
} |
Actuellement tout fonctionne sur un thread, ce qui est normal sachant que j'ai bouclé à l'interieur de ce thread.
J'ai essayé de bouclé ailleurs (les while en commentaire) mais j'ai eu l'erreur suivante à chaque fois lors de l'execution (la compilation passe sans broncher) :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Exception in thread "main" java.net.BindException: Address already in use: Canno
t bind
at java.net.DualStackPlainDatagramSocketImpl.socketBind(Native Method)
at java.net.DualStackPlainDatagramSocketImpl.bind0(Unknown Source)
at java.net.AbstractPlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at ServeurUDP.ServeurUDP(ServeurUDP.java:18)
at ServeurUDP.main(ServeurUDP.java:10) |
Si quelqu'un aurait une solution, merci d'avance de la partager :D