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 : 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
 
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 : 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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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