Bonjour,
code coté serveur :
ce code de serveur fonctionne et il arrive a acceuillir plusieur clients sur le port 4444 (je simule sur la même machine serveurs/clients) et afin d'amelioré mon serveur voici mes questions :
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 class ClientWorker implements Runnable { private Socket client; ClientWorker(Socket client) { this.client = client; } public synchronized void run() { String line; BufferedReader in = null; PrintWriter out = null; try { in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new PrintWriter(client.getOutputStream(), true); } catch (IOException e) { System.out.println("erreur lecture"); System.exit(-1); } while(true) { try { line = in.readLine(); System.out.println("le serveur a recu "+line); out.println(line); //accuser de reception } catch (IOException e) { System.out.println("erreur de lecture"); System.exit(-1); } } } }// End ClientWorker class class SocketServer extends JFrame { ServerSocket server = null; SocketServer() //Begin Constructor { // construction de la fenetre } //End Constructor public void listenSocket() { try { server = new ServerSocket(4444); }catch (IOException e) { System.out.println("probleme port 4444"); System.exit(-1); } while(true) { ClientWorker w; try { w = new ClientWorker(server.accept()); Thread t = new Thread(w); t.start(); } catch (IOException e) { System.out.println("Accept failed: 4444"); System.exit(-1); } } } protected void finalize() { try{ server.close(); }catch (IOException e) { System.out.println("probleme fermeture socket"); System.exit(-1); } } public static void main(String[] args) { SocketServer frame = new SocketServer(); frame.setTitle("Server Multi threads Program"); WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; frame.addWindowListener(l); frame.pack(); frame.setVisible(true); frame.listenSocket(); ////////// very important this code ! } }//////////////////////// End SocketServer class
1- dans le cas ou je veux que mon serveur et ces clients soient connectés en permanence est-ce que je dois fermer les flux aprés chaque message envoyé par un client. car en simulant ce code de la méthode "protected void finalize() " qui s'occupe de fermer les flux n'est pas utilisé par le programme ? pourquoi ça? on dirait elle ne sert à rien.!!!
2- comment je peut s'avoir que un client vient de se connécté au serveur et avoir le non de ce dernier bref avoir une vision sur mes client si il sont connéctés. j'ai pensé à utiliser la classe InetAddress pour avoir des information sur les clients connectés mais comment. sachant que je simule mon application serveur/clientS sur la même machine sous Eclipse.
3- si y a code similaire à se que je veux sa serai sympa de me le montré pour avoir une idée.
4- si y a des corrections à apporter sur mon code n'hésitez pas à me le signaler
Merci d'avance de m'avoir idée à ameliorer mon code serveurs.
A+
Partager