Colección de citas famosas - Diccionario de frases chinas - Manejo de excepciones comunes para sockets Java

Manejo de excepciones comunes para sockets Java

En la comunicación por socket de programación de red Java, generalmente se encuentran las siguientes excepciones.

La primera excepción es la excepción de enlace:addresalreadyinuse:JVM_bind.

Se produce una excepción cuando el servidor realiza la operación del nuevo ServerSocket(puerto) (el puerto es un valor entero). El motivo de la excepción es que un puerto como el puerto se ha iniciado y está escuchando. En este momento, puede usar el comando netstat para ver un puerto de escucha. Solo necesita encontrar un puerto desocupado para resolver el problema.

La primera excepción es excepción de conexión: conexión descartada: conexión.

Se producirá una excepción cuando el cliente ejecute un nuevo socket (puerto ip). La causa de esta excepción es que no se puede encontrar la máquina con la dirección IP (es decir, la ruta desde la máquina actual a la IP especificada no existe), o la IP existe pero no se puede encontrar el puerto especificado para escuchar. Este problema definitivamente se resolverá. Primero verifique si la IP y el puerto del cliente están escritos correctamente. Si son correctos, haga ping al servidor desde el cliente para ver si el ping puede tener éxito (si el servidor deshabilita el ping, se necesita otro método).

La primera excepción es SocketException: el socket está cerrado.

La razón por la que esta excepción puede ocurrir tanto en el cliente como en el servidor es porque el extremo local cierra activamente la conexión (llamando al método de cierre del Socket) y luego lee y escribe la conexión de red.

La primera excepción es una excepción de socket: (Restablecimiento de conexión o restablecimiento de conexión por parte del par: error de escritura de socket).

Pueden ocurrir excepciones tanto en el cliente como en el servidor. Hay dos razones para esta excepción. La primera es que si el socket en un extremo está cerrado (ya sea activamente cerrado o cerrado debido a una salida anormal), el primer paquete de datos enviado por el otro extremo provocará esta excepción (conexión restablecida por par). El otro es para que un extremo salga pero no cierre la conexión al salir. Si el otro extremo lee datos de la conexión, se generará esta excepción (restablecimiento de la conexión). Esta excepción solo se debe a operaciones de lectura y escritura después de que se desconecta la conexión.

La primera excepción es SocketException: tubería rota

Esta excepción puede ocurrir en el primer caso de la primera excepción en el lado del cliente y en el lado del servidor (es decir, se lanza una excepción de socket: conexión restablecida por par: error de escritura del socket). Si continúa escribiendo datos, se lanzará esta excepción. La solución a las dos primeras anomalías es garantizar que todas las conexiones de red estén cerradas antes de que salga el programa, y ​​la segunda es detectar la operación de cierre de la otra parte y cerrar la conexión después de descubrir que la otra parte ha cerrado la conexión.

2. Cuestiones a las que se debe prestar atención al escribir programas de red:

Es necesario distinguir correctamente entre conexiones largas y conexiones cortas. La llamada conexión larga significa que una vez que se establece una conexión corta, se mantiene permanentemente. Establecer conexión -> enviar datos -> cerrar conexión. Muchos programadores han estado escribiendo programas de red durante muchos años, pero no saben qué es una conexión larga y qué es una conexión corta.

Es el mantenimiento de conexiones largas. El llamado mantenimiento incluye dos aspectos: uno es detectar la desconexión activa de la otra parte (es decir, llamar al método de cierre del Socket), y el otro es que se necesita un programa de comunicación robusto para detectar la desconexión activa de la otra parte. Es muy sencillo para la parte principal desconectarse activamente, y si la otra parte está leyendo, el valor de retorno en este momento solo debería estar activo después de que la otra parte se desconecte. Cierre la conexión local (llame al método Close de Socket) para detectar el apagado, la salida anormal o la falla de la red de la otra parte. Un método común es utilizar el latido del corazón, es decir, ambas partes se envían datos regularmente y también reciben el latido del otro. Si no se pueden recibir los latidos del corazón de la otra parte durante varios ciclos consecutivos, se puede determinar que la otra parte está inactiva, saliendo de manera anormal o que la red no está disponible. En este momento, también debe cerrar activamente la conexión local. Si es un cliente, se puede retrasar un tiempo determinado. Después de reiniciar la conexión, aunque el Socket tiene una opción de mantener vivo para mantener la conexión, generalmente toma dos horas descubrir que la otra parte está caída de manera anormal y la red está bloqueada.

Lishi Xinzhi/Article/program/Java/hx/201311/26630