Ce qui, exactement, est-ce un “broken pipe” exception pour le Socket?
J'ai une application android qui parle à un programme sur un PC. Je suis sur Android (Java) classe Socket. Si j'ai arrêter et de redémarrer l'application PC la prochaine fois que j'envoie quelque chose à partir d'Android, je reçois un IO Exception "Broken Pipe". Ma question n'est pas à ce sujet. Voici la question:
Après l'obtention de la canalisation rompue exception si j'ai une requête à la Prise de isClosed() méthode, elle retourne false (c'est à dire, il n'est pas fermé), et si j'ai une requête à la Prise de isConnected() méthode elle renvoie true, c'est à dire, qu'il EST connecté. Quelqu'un pourrait-il expliquer ces résultats à moi? Merci à l'avance!
- stackoverflow.com/a/3751722/776244
- Samir, que le lien est sur qu'un bris de tuyau exception moyens. J'ai déjà le comprendre; c'est pourquoi j'ai dit que ma question n'est pas à ce sujet. Je veux comprendre les valeurs de retour, je reçois des deux méthodes Socket. J'ai mis à jour le titre pour clarifier cela.
Vous devez vous connecter pour publier un commentaire.
Broken pipe signifie à peu près exactement ce que vous êtes en train de parler. Le programme de votre côté a toujours son socket grande ouverte, mais la prise de l'autre côté est plus dans la communication, et de ne pas passer par le standard de "fermer le tuyau" de la procédure. Cela peut se produire si l'autre partie a perdu de la puissance soudainement, si la physique de la ligne a été coupée, ou quoi que ce soit. En tant que tel, localement le support est en cours d'enregistrement comme à la fois ouvert et connecté, c'est juste connecté à une canalisation rompue. Avez-vous le souhaitez quelques conseils pratiques ici, ou seulement de la théorie?
Socket.isClosed()
etSocket.isConnected()
seulement vous dire ce que vous ont fait pour la socket. Ils ne sont pas là pour vous dire quelque chose au sujet de l'état de la connexion. Vous n'avez pas fermé le socket: c'est ouvert. Vous avez connecté le support: il est connecté.Lorsque vous obtenez tout
IOException
l'exploitation d'unSocket
autres queSocketTimeoutException
vous devez fermer le socket.