Serveurchat

Contenu du snippet

petit serveur de chat en mode terminal multitâche qui permet de gérer les clients. Le serveur quand il démarre sur une machine prend le nom d'hôte de la machine. Ainsi tous les clients qui aimeraient se connecter au serveur doivent savoir au préalable le nom d'hôte du serveur. Le port sur lequel tourne le serveur est le port 2011. c'est mon tout début et je souhaite que vous me faites vos remarques.Merci beaucoup...

Source / Exemple :


package serveur;

import java.io.IOException;
import java.net.Socket;
import java.net.ServerSocket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.net.SocketFactory;

public class Main extends Thread {
  final static int port = 2011;
  private Socket socketCourant;
  //cette liste contient les sockets connectes au serveur
  static volatile ArrayList lesSockets = new ArrayList();
  public static void main(String[] args) {
    try {
      ServerSocket socketServeur = new ServerSocket(port);
      System.out.println("Lancement du serveur");
      while (true) {
        Socket socketClient = socketServeur.accept();
        
        Main t = new Main(socketClient,lesSockets);
        t.start();
      }
    }
    catch (java.net.SocketException e){}
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  public Main(Socket socket,ArrayList lesSockets) {
    lesSockets.add(socket);
    socketCourant = socket;
    PrintStream confirmation = null;
        try {
            confirmation = new PrintStream(socketCourant.getOutputStream());
            confirmation.print("ok\n");
        } catch (IOException ex) {
           
        }
    
  }
  public void run() {
    traitements();
  }
  public void traitements() {
	while (true){
	    try {
	      String message = "";
	      BufferedReader in = new BufferedReader(new InputStreamReader(socketCourant.getInputStream()));
	      
	      //on recup�re le message �crit
	      message = in.readLine();
	      System.out.println(message);
	      //si le message est #&xit##&xit# (valeur que j'ai choisi moi m�me, on ferme la connexion
	      if (message.startsWith("#&xit##&xit#")){
	    	  //on retire le d�connect� de la liste des des connect�s
	    	  
	    	  try{
		    	  //on recueille le nom de l'utilisateur qui vient de se d�conecter
		    	  String leDeconnecte = socketCourant.getInetAddress().getHostName();
                          System.out.println(leDeconnecte+" se deconnecte");
		    	  //on informe les autres que quelqu'un vient de se d�connecter
		      	 for (int i = 0; i<lesSockets.size(); i++){
                            System.out.println(lesSockets.size());
                            Socket s = (Socket)lesSockets.get(i);
		     	    PrintStream out = new PrintStream(s.getOutputStream());
                            System.out.println(s.getInetAddress().getHostName());
		     	    out.println("@info : "+leDeconnecte+" vient de se d\u00e9connecter");
		    	 }
                          
	    	  }
	    	  catch (Exception e){ System.out.println(e.getMessage());}
	    	  finally{
				    socketCourant.close();
//				    this.interrupt();
	    	  }
                  lesSockets.remove(socketCourant);
	      }
		  //sinon le message est renvoy&#65533; &#65533; tous les connect&#65533;s
	      else{
	     	 for (int i = 0; i<lesSockets.size(); i++){
                    Socket s = (Socket)lesSockets.get(i);
	      	    PrintStream out = new PrintStream(s.getOutputStream());
	   		    out.println(socketCourant.getInetAddress().getHostName()+" : "+message);
	     	 }
	      }
	      
	    } 
	    catch (Exception e) {
//	      e.printStackTrace();
	    }
	}
  }
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.