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) :
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 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(); //} } }
Actuellement tout fonctionne sur un thread, ce qui est normal sachant que j'ai bouclé à l'interieur de ce thread.
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){} } }
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) :
Si quelqu'un aurait une solution, merci d'avance de la partager
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)
Partager