Exception sur socket

Exception sur socket - Java - Programmation

Marsh Posté le 19-11-2007 à 20:52:05    

Bonjour voila je suis en train de faire pour un projet, un serveur mail,
voila l'exception

Citation :


java.net.SocketException: socket closed
 at java.net.SocketInputStream.socketRead0(Native Method)
 at java.net.SocketInputStream.read(Unknown Source)
 at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
 at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
 at sun.nio.cs.StreamDecoder.read(Unknown Source)
 at java.io.InputStreamReader.read(Unknown Source)
 at java.io.BufferedReader.fill(Unknown Source)
 at java.io.BufferedReader.readLine(Unknown Source)
 at java.io.BufferedReader.readLine(Unknown Source)
 at MonPackage.ThreadRelay.run(ThreadRelay.java:45)
 at java.lang.Thread.run(Unknown Source)


 
voici le code important

Citation :

public void run(){
  try{
  System.out.println("Lancement du relai" );
   
  System.out.println("nb "+reexpeditionUser.size());
  userRe="toto@192.168.1.2";
  String nomdomaine=recupDomaine(userRe);
  String ligne;
  int i=0;
  System.out.println("Reexpedition de message :"+nomdomaine);
   
   
  _s = new Socket(nomdomaine,26);
  //Création des flux de transport
  _in = new BufferedReader(new InputStreamReader(_s.getInputStream()));
  _out = new PrintStream(_s.getOutputStream());
   
  //On récupere les message recus
  while((ligne = _in.readLine())!= null && verif)  //ligne 45
  {
   System.out.println("message recu: "+ligne);
   traitementmess(ligne,i);
   i++;  
  }
 
  System.out.println("L'email a été retransmis" );
 
  System.out.println("Fin du relai" );
  } catch (Exception e) {
   System.out.println("Erreur " );e.printStackTrace();
  }finally {
 
    try {
     // fermeture du socket
     //System.out.println("Fermeture du Socket" );
     _s.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
  }
 }


 
bon voila je me connecte, sur un autre serveur, puis je lit sur le socket, tant que la variable verif est a "true" (elle est initialisé par defaut a true)
je traite les informations en fonction de ce que je recois sur le socket
jusqu'a la tout va bien,
ensuite je recois un certain message et voici son traitement, donc j'envoie à l'autre serveur un "quit", puis je ferme le socket,et je passe la variable "verif" à false, ce qui va normalement faire arreter la lecture sur le socket, mais la il me generer une exception, que je n'arrive pas a resoudre

Citation :

if(temp==5&&(code.compareTo("250" )==0)){
   _out.println("QUIT" );
   verif = false;
   // on ferme le socket
   try {
    System.out.println("Fermeture du socket" );
    _s.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }


 
Merci, d'avoir preter attention a mon probleme

Reply

Marsh Posté le 19-11-2007 à 20:52:05   

Reply

Marsh Posté le 23-11-2007 à 14:01:19    

Code :
  1. while((ligne = _in.readLine())!= null && verif) {///


 
Vu comment c'est écrit, quelle que soit la valeur de verif, on va faire le readLine parce que l'expression est évaluée de gauche à droite.
 
ecrit plutot (verif && ligne = _in.readLine())!= null)

Reply

Marsh Posté le 23-11-2007 à 16:38:39    

L'erreur de socket fermée est peut-être juste due à un problème réseau...

Reply

Sujets relatifs:

Leave a Replay

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