Configurer un Java Socket en mode rapide sur déconnecter?
-
09-06-2019 - |
Question
J'ai un port d'écoute sur mon serveur que je me connecte à l'aide d'une classe Java et l' Socket
l'interface, c'est à dire
Socket mySocket = new Socket(host,port);
Je puis saisir une OutputStream
, décorer avec une PrintWriter
dans autoflush mode et je suis de rire - sauf si le port d'écoute ferme.Puis-je obtenir
tcp4 0 0 *.9999 *.* LISTEN
tcp 0 0 127.0.0.1.45737 127.0.0.1.9999 CLOSE_WAIT
et je n'arrive pas à détecter le problème dans le programme - j'ai essayé d'utiliser le isConnected()
méthode sur la prise, mais il ne semble pas savoir que la connexion est fermée.
Je veux être au courant du problème, la prochaine fois j'essaie de l'écrire à la Prise de courant afin que je puisse essayer et de se reconnecter et de signaler le problème.
Des conseils s'il vous plaît?
Merci à tous
La solution
Définir un court délai d'attente?
N' isOutputShutdown()
ne vous obtenez ce que vous voulez?
Vous pouvez toujours construire un SocketWatcher
classe qui tourne dans son propre Thread
et essaie à plusieurs reprises d'écrire des chaînes vides à l' Socket
jusqu'à ce que soulève une SocketClosedException
.
Autres conseils
La seule méthode fiable pour détecter une fracture de la connexion TCP est d'écrire pour elle, qui finira par causer une "réinitialisation de la connexion' IOException.Cependant, en raison de mise en mémoire tampon, il n'arrivera pas sur le premier à écrire après la déconnexion,p, mais sur une écriture ultérieur.Vous ne pouvez pas faire quelque chose à ce sujet.
Définir un thread différent à la lecture de la prise de courant.Il permet de bloquer jusqu'à ce que le socket est fermé, et ensuite, une exception sera levée.Attraper cette exception pour détecter les fermer immédiatement.