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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top