Вам слід дуже уважно оглянути повний слід,
У мене є серверний додаток і виправив java.net.SocketException: Connection reset
справу.
У моєму випадку це трапляється під час зчитування з Socket
об’єкта clientSocket, який закрив своє з'єднання з якихось причин. (Загублена мережа, збиток брандмауера або програми або передбачається закриття)
Насправді я відновив зв’язок, коли отримав помилку під час читання цього об’єкта Socket.
Socket clientSocket = ServerSocket.accept();
is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
int readed = is.read(); // WHERE ERROR STARTS !!!
Цікавим є те, що for my JAVA Socket
якщо клієнт підключається до мого ServerSocket
і закриває його з'єднання, не надсилаючи нічого is.read()
дзвінків, рекурсивно. Здається, через те, що ви знаходитесь у нескінченному циклі для читання з цього сокета, ви намагаєтесь прочитати із закритого з'єднання. Якщо ви використовуєте щось подібне нижче для роботи з читанням;
while(true)
{
Receive();
}
Тоді ви отримуєте stackTrace щось подібне нижче і далі
java.net.SocketException: Socket is closed
at java.net.ServerSocket.accept(ServerSocket.java:494)
Що я зробив, це просто закрити ServerSocket і відновити зв’язок і чекати подальших вхідних клієнтських з'єднань
String Receive() throws Exception
{
try {
int readed = is.read();
....
}catch(Exception e)
{
tryReConnect();
logit(); //etc
}
//...
}
Це відновлює моє з'єднання для невідомих втрат клієнтського сокета
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...
}
}
Я не міг знайти іншого способу, оскільки, як ви бачите знизу зображення, ви не можете зрозуміти, втрачено чи ні без зв'язку try and catch
, тому що все здається правильно. Цей знімок я отримав, коли отримував Connection reset
постійно.