D'un coté tu as un thread "ServerSocket", de l'autre un thread "ClientSocket".
Ta socket server écoute tout le temps :
Code :
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.NetworkInterface;
- import java.net.InetAddress;
- import java.io.ObjectOutputStream;
- import java.io.ObjectInputStream;
- import java.io.IOException;
- import java.io.NotSerializableException;
- public class ServerThread implements Runnable {
- // Variables de classe.
- private Felix app;
- private int counter = 0;
- private int connectionPort = 2184;
- private boolean listening = true;
- private ServerSocket serverSocket;
- private Socket connection;
- private ObjectOutputStream output;
- private ObjectInputStream input;
- /********************************/
- /* CONSTRUCTOR */
- /********************************/
- public ServerThread(Felix parent) {
- app = parent;
- startServerThread();
- }
- public ServerThread(int port, Felix parent) {
- if (port>0) {
- connectionPort = port;
- }
- app = parent;
- startServerThread();
- }
- /************************************/
- /* LANCEMENT DU THREAD SERVER */
- /************************************/
- private void startServerThread() {
- // On affiche quelques infos intéressantes sur le serveur
- //---displayServerInfos();
- try {
- serverSocket = new ServerSocket(connectionPort);
- System.out.println("> SERVER : Le serveur attend les connections...\n" );
- } catch (IOException e) {
- System.out.println("> SERVER : La socket serveur ne peut pas être lancée sur le port "+connectionPort+"." );
- System.exit(-1);
- }
- }
- /********************************/
- /* RUN */
- /********************************/
- public void run() {
- // Tant qu'on indique au thread de vivre.
- // ----------------------------------------
- while (listening) {
- try {
- // DO QUELQUE CHOSE !!!
- }
- catch (IOException e) {
- System.out.println("> SERVER : l'acceptation de la socket cliente a échouée!" );
- }
- }
- // On a décidé de ne plus écouter les appels client; le thread va se terminer.
- try {
- serverSocket.close();
- }
- catch (IOException e) {
- System.out.println("> SERVER : la tentative de fermeture du thread serveur a échouée!" );
- }
- }
- /********************************/
- /* OTHERS METHODS */
- /********************************/
- public void setListening(boolean state) {
- listening = state;
- }
- public void displayServerInfos() {
- try {
- NetworkInterface nwi = NetworkInterface.getByInetAddress(InetAddress.getByName(app.getLocalHost()));
- System.out.println("-------------------------------------------------" );
- System.out.println("> Network interface : " + nwi.getDisplayName());
- System.getProperties().list(System.out);
- System.out.println("-------------------------------------------------\n" );
- } catch(IOException e) {}
- }
- }
|
Quant à la socket cliente :
Désolé, le code est dépouillé et donc il manque des trucs (volontairement et surtout pour la socket cliente), donc à toi de faire le travail d'analyse.
En gros, pour le principe, la socket server écoute tout le temps et ne s'arrête "jamais", la socket cliente est crée au besoin
Code :
- ClientThread xclientThread = new ClientThread();
- new Thread(xclientThread).start();
|
Et la socket cliente s'arrête d'elle-même lorsque le client et le server se sont mis d'accord.
Voilà 
Message édité par ollone le 09-05-2005 à 10:27:01