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