Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1748 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  probleme de cast :!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de cast :!

n°789510
vdavid1982
Posté le 07-07-2004 à 18:51:04  profilanswer
 

voila je suis en train de développer un chat en java
1 client = 1 thread
je cherche le moyen de d'envoyer un message à tous les clients
je répertorie tous les threads dans un threadgroup  
 
mais à la ligne de code en rouge il me met une erreur :
Cannot cast from Thread to server.connexion
 
comment faire pour attribuer la méthode toClient ( un outputstream ) à un thread ?
 
voici un bou du code
 
Thread[] threads = new Thread[tg.activeCount()];  
   int nbThread = tg.enumerate(threads);  
     
   if (clientDest == "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  
     }  
    }
   }

mood
Publicité
Posté le 07-07-2004 à 18:51:04  profilanswer
 

n°789522
FealiT
Posté le 07-07-2004 à 19:17:07  profilanswer
 

on ne voit pas du tout la partie ou tu insere les instances de ta classe connexion dans ton tableau threads...

n°790509
benou
Posté le 08-07-2004 à 16:13:49  profilanswer
 

une remarque sur ton code :
 - les conventions java veulent qu'un nom de classe commence par une majuscule
 - les attributs de classe public c'est mal :o
 - le == ne doit être utilisé qu'avec les types promitifs (int, char, etc ...) ou pour tester que deux variables pointent le même objet. Pour tester l'égalité de 2 objets il faut utiliser equals :

Code :
  1. if (clientDest.equals("public" ))


---------------
ma vie, mon oeuvre - HomePlayer
n°792488
vdavid1982
Posté le 10-07-2004 à 14:58:10  profilanswer
 

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 ...

n°792509
Taz
bisounours-codeur
Posté le 10-07-2004 à 15:20:54  profilanswer
 

benou a écrit :

Code :
  1. if (clientDest.equals("public" ))


boom si clientDest est null ... "public".equals(clientDest) est plut sur

n°792512
vdavid1982
Posté le 10-07-2004 à 15:23:14  profilanswer
 

ok merci .. c plus logic c vrai ;)

n°792521
benou
Posté le 10-07-2004 à 15:34:15  profilanswer
 

Taz a écrit :

boom si clientDest est null ... "public".equals(clientDest) est plut sur


je sais bien mais j'aime pas cette syntaxe ... elle se lit pas de façon logique (je trouve).
 
Et faire ce genre de truc c'est passer à côté du cas où la valeur est null (et qui nécessite souvent un traitement particulier).
 
Bref, c'est une facilité d'écriture que je n'utilise pas ...

n°792529
Taz
bisounours-codeur
Posté le 10-07-2004 à 15:45:45  profilanswer
 

moi aussi j'aurais aimé un operator==


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  probleme de cast :!

 

Sujets relatifs
Probleme avec explorer ou mozillaProbleme d'acces Oracle Management Server
Probleme pour ecrie un algorithmewxFileName problème
Problème d'affichage ( Rien ne s'affiche )Problème de taille de la barre de défilement sur iframe
[ASP - HTML - JS] Probleme d'impression d'une page webprobleme pointeur void alors qu'un cast de char* marche :\
probleme de cast dynamique avec heritage etc[SQL] problème avec CAST
Plus de sujets relatifs à : probleme de cast :!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR