Anda harus memeriksa jejak lengkap dengan sangat hati-hati,
Saya memiliki aplikasi soket server dan memperbaiki java.net.SocketException: Connection reset
kasus.
Dalam kasus saya itu terjadi saat membaca dari Socket
objek clientSocket yang ditutup koneksinya karena beberapa alasan. (Jaringan hilang, firewall atau aplikasi crash atau penutupan yang dimaksudkan)
Sebenarnya saya sedang membangun kembali koneksi ketika saya mendapat kesalahan saat membaca dari objek Socket ini.
Socket clientSocket = ServerSocket.accept();
is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
int readed = is.read(); // WHERE ERROR STARTS !!!
Hal yang menarik adalah for my JAVA Socket
jika klien terhubung ke my ServerSocket
dan menutup koneksinya tanpa mengirim is.read()
panggilan apa pun secara rekursif. Tampaknya karena berada dalam loop sementara yang tak terbatas untuk membaca dari soket ini, Anda mencoba membaca dari koneksi tertutup. Jika Anda menggunakan sesuatu seperti di bawah ini untuk operasi baca;
while(true)
{
Receive();
}
Kemudian Anda mendapatkan stackTrace seperti di bawah ini dan seterusnya
java.net.SocketException: Socket is closed
at java.net.ServerSocket.accept(ServerSocket.java:494)
Apa yang saya lakukan hanyalah menutup ServerSocket dan memperbarui koneksi saya dan menunggu koneksi klien masuk lebih lanjut
String Receive() throws Exception
{
try {
int readed = is.read();
....
}catch(Exception e)
{
tryReConnect();
logit(); //etc
}
//...
}
Ini memulihkan koneksi saya untuk soket klien yang tidak diketahui hilang
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...
}
}
Saya tidak dapat menemukan cara lain karena seperti yang Anda lihat dari gambar di bawah ini Anda tidak dapat memahami apakah koneksi terputus atau tidak tanpa try and catch
, karena semuanya tampak benar. Saya mendapatkan foto ini saat saya Connection reset
terus melanjutkan.