merci benou pour les infos .. je suis desole je debute en java ...
sinon la partie ou j'instance la class connexion ds mon tableau de thread ?
---------- voici mon code .. je sais ca ne se fait pas mais je veux comprendre -------------------------------
public class server
{
int port;
ServerSocket server;
Socket socket;
String[] noms = new String [100];
ThreadGroup tg;
public server() throws Exception
{
noms[0]="ln"; // identifie noms à la liste des noms
noms[1]="fln"; // fin de liste de noms
port = 5550;
server = new ServerSocket(port);
tg = new ThreadGroup("Clients" );
System.out.println("Le serveur attend une connexion" );
for (;
{
socket = server.accept();
System.out.println("le serveur à recu et accepte la connexion venant de " + socket);
connexion c = new connexion(port,socket);
}
}
class connexion implements Runnable
{
int port;
Socket socket;
public DataInputStream fromClient;
public PrintStream toClient;
public Thread t;
public connexion(int p, Socket s)
{
this.port = p;
this.socket = s;
System.out.println("Attente d'une information" );
try
{
fromClient = new DataInputStream(socket.getInputStream());
toClient = new PrintStream(socket.getOutputStream());
System.out.println("Nouvelle connexion au client : " + socket.getLocalAddress());
t = new Thread(tg,this,"Thread client" );
t.start();
}
catch (IOException e)
{
try { socket.close(); } catch (IOException ee) {}
}
}
public void run()
{
String nom;
String lettre;
String line;
String client_dest,client_source;
try
{
fromClient = new DataInputStream(socket.getInputStream());
toClient = new PrintStream(socket.getOutputStream());
System.out.println("Nouvelle connexion au client : " + socket.getLocalAddress());
toClient.println("mBienvenue sur le chat E_Learning" );
while ((line = fromClient.readLine()) != null)
{
System.out.println("line = "+line);
lettre=line.substring(0,1);
if ((lettre.compareTo("m" ))==0) // m=message
{
client_source = fromClient.readLine();
client_dest = fromClient.readLine();
line=fromClient.readLine();
envoyer_message_client(client_source,client_dest,line);
sendList();
}
else if ((lettre.compareTo("a" ))==0) // a = ajouter nom
{
ajouter_ListeClient(line.substring(1));
this.t.setName(line.substring(1));
sendList();
}
else if (lettre.compareTo("q" )==0) // q=quit
{
stop();
//supprimer_ListeClient(fromClient.);
}
else if (lettre.compareTo("s" )==0) // s=server
{
System.out.println(line.substring(1));
}
else
{
toClient.println("Erreur, première lettre non reconnue" );
}
}
toClient.println("message : bye !" );
}
catch (IOException e)
{
System.out.println("Exception entree/sortie : "+e.getMessage());
}
stop();
}
public void envoyer_message_client(String clientSource,String clientDest, String message)
{
toClient.println("m" );
Thread[] threads = new Thread[tg.activeCount()];
int nbThread = tg.enumerate(threads);
if (clientDest.equals("public" )) // envoie du message public
{
for (int i=0;i<threads.length;i++)
{
try
{
( (connexion) threads[i] ).toClient.println(clientDest);
( (connexion) threads[i] ).toClient.println(message);
}
catch (IOException ex1)
{
// Envois du message imépossible à ce client, Next-One
}
}
}
else // envoie du message privé
{
for (int i=0;i<threads.length;i++)
{
try
{
if (threads[i].getName()==clientDest)
{
( (connexion) threads[i] ).toClient.println(clientDest);
( (connexion) threads[i] ).toClient.println(clientSource);
( (connexion) threads[i] ).toClient.println(message);
}
}
catch (IOException ex1)
{
// Envois du message imépossible à ce client, Next-One
}
}
}
/*
Thread[] threads = new Thread[threadGroup.activeCount()];
int nbThread = threadGroup.enumerate(threads);
for (int i = 0; i < threads.length; i++) {
try {
if( (event.getDest() != null && threads[i].getName().equals(event.getDest())) || event.getDest() == null )
( (ServerDeamon) threads[i]).out.writeObject(event);
}
catch (IOException ex1) {
// Envois du message impossible à ce client, Next-One
}
}
voila vous avez tout ...