in

sockets – java.net.SocketException: restablecimiento de la conexión

apple touch icon@2

Debe inspeccionar el rastro completo con mucho cuidado,

Tengo una aplicación de socket de servidor y arreglé un java.net.SocketException: Connection reset caso.

En mi caso sucede mientras leo de un clientSocket Socket objeto que ha cerrado su conexión por alguna razón. (Red perdida, firewall o falla de la aplicación o cierre previsto)

En realidad, estaba restableciendo la conexión cuando recibí un error al leer este objeto Socket.

Socket clientSocket = ServerSocket.accept();
is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
int readed = is.read(); // WHERE ERROR STARTS !!!

Lo interesante es for my JAVA Socket si un cliente se conecta a mi ServerSocket y cierra su conexión sin enviar nada is.read() está siendo llamado repetidamente Parece que debido a que está en un bucle infinito while para leer desde este socket, intenta leer desde una conexión cerrada. Si usa algo como el siguiente para la operación de lectura;

while(true)
{
  Receive();
}

Luego obtienes una pila Traza algo como a continuación una y otra vez

java.net.SocketException: Socket is closed
    at java.net.ServerSocket.accept(ServerSocket.java:494)

Lo que hice fue cerrar ServerSocket y renovar mi conexión y esperar más conexiones de cliente entrantes

String Receive() throws Exception
{
try {                   
            int readed = is.read();
           ....
}catch(Exception e)
{
        tryReConnect();
        logit(); //etc
}


//...
}

Esto restablece mi conexión para pérdidas de socket de cliente desconocidas

private void tryReConnect()
        {
            try
            {
                ServerSocket.close();
                //empty my old lost connection and let it get by garbage col. immediately 
                clientSocket=null;
                System.gc();
                //Wait a new client Socket connection and address this to my local variable
                clientSocket= ServerSocket.accept(); // Waiting for another Connection
                System.out.println("Connection established...");
            }catch (Exception e) {
                String message="ReConnect not successful "+e.getMessage();
                logit();//etc...
            }
        }

No pude encontrar otra manera porque, como puede ver en la imagen de abajo, no puede entender si la conexión se pierde o no sin un try and catch , porque todo parece correcto. Obtuve esta instantánea mientras obtenía Connection reset continuamente.

ingrese la descripción de la imagen aquí

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

windows icon

Windows 10 – Menú de inicio

02Lgo6zLcmKhsko2WXswUfO 1.1630084177.fit lim.size 1200x630

Revisión profesional de ProtonMail | PCMag