Fermeture d'une Socket par le client

cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009 - 1 déc. 2004 à 10:55
indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 - 1 déc. 2004 à 11:58
Salut a tous

Je suis un train de developper une application client serveur, et j'ai un petit soucis avec mes socket:
Pour le moment je me connecte avec telnet, mais quand je ferme la fenetre du telnet, ma boucle continue de tourner.
Comment savoir si le client a fermé la socket?

Voici le code que j'utilise:

public void run (){
System.out.println("Thread " + s.getPort() + " is launched");
try {
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
while(!s.isClosed()) {
out.println("Socket " + s.getPort() + " say: it is time to go to bed");
System.out.println("Socket state: b-" + s.isBound() + " co-" + s.isConnected() + " cl-" + s.isClosed() + " is-" + s.isInputShutdown() + " os-" + s.isOutputShutdown());
this.yield();
}
out.close();

} catch (IOException e) {
System.err.println("Erreur socket");
}
System.out.println("Thread " + s.getPort() + " is terminated");
}

Merci

4 réponses

cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009
1 déc. 2004 à 10:57
J'ai oublié de signaler que s etait ma socket :big)
0
indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
1 déc. 2004 à 11:15
Slut
c'est normal, tu boucles si tu constates que la socket est toujours ouvert (!s.isClosed()). Or, à aucun moment tu fais s.close();. Du coup, elle reste toujours ouverte et ainsi continue de boucler. En fait, c'est à toi de déterminer à quel moment il faut fermer la socket (quand le client ferme la fenêtre, lance une commande ...).

Voilà

[Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises]
0
cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009
1 déc. 2004 à 11:20
D'accord mais comment je sais que le client n'est plus la?
quand je ferme mon telnet, il envoie rien...
0
indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
1 déc. 2004 à 11:58
Ben j'sais pas, peut être un truc du style:
DataInputStream Input = new DataInputStream(s.getInputStream()));
            String line;
            while ((line = Input.readLine()) != null) {
...
}



Voilà

[Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises]
0
Rejoignez-nous