[java.net][TCP] Rupture de connexion ? Détection ?
Jeux de données :
- 1 serveur
- Chaque connection du client au serveur génère un thread serviceClient
Scenario de test :
- Le client se connect au serveur sous une console (type unix ou dos)
- Une fois que le serveur génère un thread pour s'en occuper, le client rompt brutalement la connexion (il ferme la console)
Résultat obtenu :
- Soit 1 NullPointerException, soit un SocketException.
Ce que je voudrais faire :
- Détecter la déconnexion du client avant même avoir généré une exception : fermer la connexion du client proprement (le retirer de mon vecteur serviceClient, mettre à jour un certain nombre de données).
Est il possible de réaliser exactement ce que j'ai l'intention de faire, ou suis je obligé de traiter de manière exhaustive toutes les exceptions engendrées par sa déconnexion brutale ? :D
d'avance Merci !
1 aspect de la solution : on écrit sur le canal de sortie
1 aspect de la solution : on écrit sur le canal de sortie périodiquement :
au démarrage du thread client, je lance un thread observer associé à la socket du client.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class Observer extends Thread {
private Socket s;
private serviceJoueur service;
public Observer(Socket s, serviceJoueur service) {
this.s = s;
this.service = service;
}
public void run() {
try {
int i = 0;
while (true) {
// check table ascii... 0 = null
s.sendUrgentData(0);
// on écrit sur le toutes les secondes
synchronized(this) {wait(1000);}
i++;
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
// on pourra tuer par la suite le service associé à la socket
}
}
} |
pas de problème. si un problème se présente sur un canal de socket client, il se présentera tot ou tard ici. Donc ça marche.