volleyball volley permission dependency android networking network-programming

android - volley - ¿Qué significa exactamente una excepción de "tubería rota" para el Socket?



volley implementation android (2)

Tengo una aplicación de Android que habla con un programa en una PC. Estoy usando la clase Socket de Android (Java). Si paro y reinicio la aplicación para PC la próxima vez que envíe algo desde Android, recibo una excepción IO "Broken Pipe". Mi pregunta no es sobre eso. Aquí está la pregunta:

Después de obtener la excepción de tubería rota si consulto el método isClosed () del Socket, devuelve falso (es decir, no está cerrado), y si consulto el método isConnected () del Socket, devuelve true, es decir, que está conectado. ¿Podría alguien explicarme estos resultados? ¡Gracias por adelantado!


La tubería rota significa más o menos exactamente de lo que estás hablando aquí. El programa de su lado todavía tiene su zócalo completamente abierto, pero el zócalo del otro lado ya no está en comunicación, y no pasó por el procedimiento estándar de "cerrar tubería". Esto puede suceder si el otro lado pierde potencia repentinamente, si la línea física se cortó, o lo que sea. Como tal, localmente el socket se registra como abierto y conectado, simplemente está conectado a una tubería rota. ¿Deseó algún consejo práctico aquí, o simplemente la teoría?


Socket.isClosed() y Socket.isConnected() solo le Socket.isConnected() lo que le ha hecho al socket. No están allí para decirte nada sobre el estado de la conexión. No ha cerrado el socket: está abierto. Has conectado el socket: está conectado.

Cuando obtiene cualquier IOException opera un Socket no sea SocketTimeoutException o un tiempo de espera de conexión, debe cerrar el socket.