printwriter et socket detecter deconnection

printwriter et socket detecter deconnection - Java - Programmation

Marsh Posté le 26-05-2005 à 17:00:52    

Bonjour,
Je suis entrain de travailler sur une application qui utilise des sockets TCP.
D'un cote j'ai un client qui fait des envois de messages et donc le serveur lui s'occupe de les recevoir.
Le probleme est que lorsque je debranche le cable reseau l'application cliente continue d'envoyer des messages. je teste donc socket.isConnected(), socket.isClose(), socket.isBound ... mais leur etat ne change pas je ne peux donc pas savoir que le cable n'est plus connectee. De plus je n'est pas d'exception quand je fait : socket.getOutputStream().
Ma question est donc comment savoir que l'envoi ne peut pas etre realise et que le cable n'est plus branche.
 
voila le code ou je realise l'envoi des messages :

Code :
  1. public void send2Serial(String message)
  2. {
  3.  System.err.println("Send : "+message);
  4.  System.err.println("Input : "+this.socket.isInputShutdown());
  5.  System.err.println("Output : "+this.socket.isOutputShutdown());
  6.  System.err.println("Connect : "+this.socket.isConnected());
  7.  System.err.println("Close : "+this.socket.isClosed());
  8.  System.err.println("Bound : "+this.socket.isBound());
  9.  try{
  10.   PrintWriter writ = new PrintWriter(new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream())),true);
  11.   writ.println(message);
  12.  }
  13.  catch(IOException ioe)
  14.  {
  15.   System.err.println("Erreur d'ecriture!" + ioe.toString());
  16.   this.testAndReconnect();
  17.  }
  18.  System.err.println("Send OK : "+message);
  19. }


 
Merci d'avance pour votre aide.


Message édité par kenumdrum le 27-05-2005 à 09:58:07
Reply

Marsh Posté le 26-05-2005 à 17:00:52   

Reply

Marsh Posté le 27-05-2005 à 10:47:28    

j'ai trouve ca en cherchant sur le net :
 
Vous pouvez utiliser la méthode isReachable(int timeout) de la classe InnetAdress qui indique si l'adresse est accessible. Les implémentation de cette méthode utilisent en général ICMP. En cas de problèmes d'accès ICMP, la méthode tente une connexion TCP sur le port 7 (echo).
 
merci developpez.com
 
le truc c'est que ca me donne l'etat de la connection mais pas l'etat de la socket.
 
donc si vous avez des idees.
merci d'avance
A+

Reply

Marsh Posté le 27-05-2005 à 14:49:21    

Solution pour detecter la rupture de la socket a l'envoi ne pas passer par printwriter ou autre stream, mais directement en recuperant le OutputStream de la Socket et envoyer les donnees en byte.
 

Code :
  1. try{
  2.   //recupere l'OutputStream
  3.   OutputStream os =  this.socket.getOutputStream();
  4.   //convertie la chaine en tableau de byte et l'envoi    
  5.   os.write(message.getBytes());
  6.  }
  7.  catch(IOException ioe)
  8.  {
  9.   System.err.println("Erreur d'ecriture!" + ioe.toString());
  10.   this.testAndReconnect();
  11.  }


 
A+

Reply

Marsh Posté le 19-06-2008 à 10:09:31    

bon j'ai travaillé sur ces problèmes.
pour la solution qui je trouvé et ca marche bien celle de faire un thread d'emission(avec boucle infinie) qui envoie n'importe qoi et de l'autre coté un autre threa reception
dans le bloc catch vous étes bien sur un état de déconnexion puisque l'inputstrem et l'outputstream non reconnu.

Reply

Sujets relatifs:

Leave a Replay

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