Le principal inconvénient, c'est de ne pouvoir avoir qu'un client. Pas très pratique.
Il va donc être nécessaire de déléguer la réponse client à un thread.
Il y aura donc deux classes.
La première créer le serveur et écoute les connexions clientes.
La deuxième dialogue avec le client et est donc un thread.
La première classe :
package org.emeric.exemple.echo2; import java.net.ServerSocket; public class EchoServer { public static void main(String[] args) throws Exception { final ServerSocket socket = new ServerSocket(4444) ; while (true) { System.out.println("Waiting for client..."); new EchoRequestHandler(socket.accept()); } } }
La deuxième classe :
package org.emeric.exemple.echo2; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; /** * Class to read request * * @author Emeric MARTINEAU */ public class EchoRequestHandler extends Thread implements Runnable { /** * Socket of client */ private Socket socket ; /** * Constructor * * @param s socket */ public EchoRequestHandler(final Socket s) { socket = s; Thread t = new Thread(this) ; t.setDaemon(true) ; t.start() ; } /** * Read and response to the client */ @Override public void run() { System.out.println("New client...") ; try { // Reader final BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); // Auto flush, when println() call final PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); String str = null ; do { // Read and wait if no data str = in.readLine() ; // Print out.println(str) ; } while (str != null) ; out.close() ; socket.close() ; } catch (final IOException e) { // TODO } System.out.println("Bye client..."); } }
Vous voilà prêt à dévolloper de nombreux serveurs en Java.
Aucun commentaire:
Enregistrer un commentaire