[SOCKET]Faire une action en cas de perte de connexion.

Faire une action en cas de perte de connexion. [SOCKET] - Java - Programmation

Marsh Posté le 05-12-2004 à 20:24:23    

bonjour tout le monde,  
j'ai une application client et une serveur, je voudrais que quand l'application cliente se fermer une action soit declancher malheureusement je ne sais pas comment faire. Je pensais mettre avec des exception mais je ne sais pas lesquels faut prendre.  
Voici mon code coter serveur:  

Code :
  1. //Mon serveur gère plusieurs connections clients à l'aide de threads idntifiés par un entier   
  2. public class threadserveur extends Thread
  3.    {
  4.       Socket connexion;
  5.       int numero;
  6.       boolean arret=false;
  7.       public threadserveur(Socket connexion, int numero)
  8.       {
  9.          this.connexion = connexion;
  10.          this.numero = numero;
  11.       }
  12.       public void run()
  13.       {
  14.                 }
  15.          }
  16.  
  17. //Dans le run du thread threadserveur plusieurs actions sont possiblesavec le client comme des requêtes sql ...  
  18. //dans le run il y a sa  
  19. try
  20.          {
  21.             boolean arret = false;
  22.             BufferedReader entrée = new BufferedReader(new InputStreamReader(connexion.getInputStream()));
  23.             PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true);
  24.             String nom=null;
  25.             String mdp=null;
  26.             while (!arret)
  27.             {
  28.                try
  29.                {
  30.                String ligne = entrée.readLine();
  31.                if(ligne.equals("verification" ))
  32.                {
  33.                   nom=entrée.readLine();
  34.                   mdp=entrée.readLine();
  35.                   int machin=verification(nom,mdp);
  36.                   if(machin==1)
  37.                   {
  38.                      
  39.                      sortie.println("true" );
  40.                      while(!arret)
  41.                      {
  42.                      }
  43. // c'est ici où est le problème, je voudrais que l'application serveur execute util_deconnexion() quand le client s'éteint.  
  44.                      util_deconnexion(nom,mdp);
  45. // Mais quand le client s'éteint par exemple avec un clic sur la fermeture de l'application, le serveur termine directement le thread et ne passe pas par util_deconnexion().  
  46.                   }
  47.                   else
  48.                   {
  49.                      if(machin==2)
  50.                      {
  51.                         sortie.println("Mot de passe erroné" );
  52.                      }
  53.                      else
  54.                      {
  55.                         sortie.println("L'utilisateur "+ nom +" n'existe pas" );
  56.                      }
  57.                   }
  58.                }
  59.                if(ligne.equals("enregistrement" ))
  60.                {
  61.                   nom=entrée.readLine();
  62.                   mdp=entrée.readLine();
  63.                   boolean machin=envoie_enregistrement(nom,mdp);
  64.                   if(machin==true)
  65.                   {
  66.                      sortie.println("L'utilisateur "+ nom +" a bien été enregistré" );
  67.                   }
  68.                   else
  69.                   {
  70.                      sortie.println("Vous n'avez pas été enregistré" );
  71.                   }
  72.                   arret=true;
  73.                }
  74.                }
  75.                catch(IOException ioeee)
  76.                {
  77.                   panneau.append("erreur 2" );
  78.                }
  79.                catch(Exception ee)
  80.                {
  81.                   panneau.append("erreur 1" );
  82.                }
  83.             }
  84.             connexion.close();
  85.             util_deconnexion(nom,mdp);
  86.          }
  87.          catch(IOException e)
  88.          {
  89.             panneau.append("erreur : " + e);
  90.          }
  91.       }
  92.    }


merci pour votre aide


Message édité par meda le 07-12-2004 à 12:03:05
Reply

Marsh Posté le 05-12-2004 à 20:24:23   

Reply

Marsh Posté le 06-12-2004 à 09:02:34    

essaye code au lieu de cpp ..


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 06-12-2004 à 10:14:39    

Jubijub a écrit :

essaye code au lieu de cpp ..


essaie surtout [/ cpp] et pas [\ cpp]


Message édité par skeye le 06-12-2004 à 10:14:47

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 07-12-2004 à 12:03:48    

voila c'est modifié.
Personne ne peut m'aider ?

Reply

Marsh Posté le 07-12-2004 à 12:19:24    

A moins que le client notifie le serveur d'une fin de la communication - ce qui devrait se faire dans le cas d'une terminaison grâcieuse, on se dit au revoir - le serveur ne peut pas directement "sentir" que le client est déconnecté.
 
Sauf à charge pour toi d'implémenter un mécanisme de "ping/pong" dans le protocole de communication. On en a parlé il n'y a pas lgtmps sur ce forum.
 
De plus :
- BufferedReader entrée : à proscrire : un horrible caractère accentué;
- Prends la bonne habitude de coder en anglais;
- ligne.equals("verification" ) : effectue plutôt le test inverse pour éviter un NullPointerException dans le cas où ligne est null;
- Un petit effort sur l'orthographe me ferait plaisir.


Message édité par sircam le 07-12-2004 à 12:19:55

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 07-12-2004 à 13:18:29    

merci je vais voir cela.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed