Exception sur socket - Java - Programmation
Marsh Posté le 23-11-2007 à 14:01:19
Code :
|
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)
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...
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
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
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
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