Tam izi çok dikkatli incelemelisiniz,
Bir sunucu soket uygulamam var ve bir java.net.SocketException: Connection reset
durumu düzelttim .
Benim durumumda, bir sebepten Socket
dolayı bağlantısını kapatan clientSocket nesnesinden okurken oluyor . (Ağ kaybı, güvenlik duvarı veya uygulama çökmesi veya amaçlanan kapanma)
Aslında bu Socket nesnesinden okurken bir hata aldığımda yeniden bağlantı kuruyordum.
Socket clientSocket = ServerSocket.accept();
is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
int readed = is.read(); // WHERE ERROR STARTS !!!
İlginç olan şey, for my JAVA Socket
bir istemcinin benim ServerSocket
bağlantıma bağlanması ve is.read()
özyinelemeli olarak herhangi bir çağrı göndermeden bağlantısını kapatmasıdır. Okuma işlemi için aşağıdaki gibi bir şey kullanırsanız;
while(true)
{
Receive();
}
Sonra bir yığın elde edersiniz Aşağıdaki gibi bir şeyi sürekli takip edin
java.net.SocketException: Socket is closed
at java.net.ServerSocket.accept(ServerSocket.java:494)
Yaptığım şey sadece ServerSocket'i kapatmak ve bağlantımı yenilemek ve daha fazla gelen istemci bağlantısını beklemek
String Receive() throws Exception
{
try {
int readed = is.read();
....
}catch(Exception e)
{
tryReConnect();
logit(); //etc
}
//...
}
Bu, bilinmeyen istemci soket kayıpları için bağlantımı yeniden kurar
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...
}
}
Başka bir yol bulamadım çünkü aşağıdaki resimde gördüğünüz gibi bağlantının kopup kaybolmadığını anlayamıyorsunuz try and catch
, çünkü her şey doğru görünüyor. Bu anlık görüntüyü Connection reset
sürekli alırken aldım .