![How Can I Reliably Detect Closed Remote Connections Using the Java Socket API?](https://img.php.cn/upload/article/000/000/000/173495431483931.jpg)
API Java Socket : identification des connexions fermées
Déterminer l'état des connexions à distance peut être difficile à l'aide de l'API socket Java. Contrairement à isConnected() et isClosed(), qui reflètent uniquement l'état local du socket, il n'est pas simple de déterminer si la connexion a été interrompue par la partie distante.
Pour déterminer avec précision l'état de la connexion, vous doit interagir activement avec le socket. Voici quelques approches :
-
Échange de données : Tenter d'écrire des données dans le flux de sortie et capturer l'exception qu'il génère peut indiquer une connexion fermée. Cependant, cette approche envoie constamment du trafic inutile et n'est pas idéale.
-
Blocage des entrées/sorties : Lorsqu'une connexion est fermée de manière ordonnée, le blocage des opérations, telles que readLine() ou read(), renverra des valeurs prévisibles (-1 ou null). Malheureusement, cette méthode peut ne pas être opportune si la connexion est interrompue brusquement.
-
Délai d'expiration de lecture : La configuration d'un délai d'expiration de lecture peut aider à détecter les connexions inactives. Si le délai d'expiration expire avant de recevoir des données, la connexion est probablement perdue.
-
Clés de sélection non valides : Dans Java 7 et versions ultérieures, l'utilisation de select() avec OP_READ peut détecter les connexions fermées lorsque la clé de sélection associée devient invalide. Cependant, ce comportement peut varier en fonction de la plate-forme et de la version de JRE.
N'oubliez pas que ces méthodes ne détecteront rapidement les connexions fermées que si l'homologue distant suit l'étiquette de fermeture de connexion appropriée. Sinon, la connexion pourrait entrer dans un état à moitié fermé, rendant la détection plus difficile.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!