Amélioré un serveur multithread
Bonjour,
code coté serveur :
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 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 |
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 :
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.:oops:
A+