आपको बहुत सावधानी से पूर्ण ट्रेस का निरीक्षण करना चाहिए,
मेरे पास एक सर्वर सॉकेट एप्लिकेशन है और एक java.net.SocketException: Connection reset
मामला तय किया है।
मेरे मामले में यह क्लायंट सॉकेट 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();
}
तब आपको नीचे और आगे की तरह कुछ स्टैकट्रेस मिलता है
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
लगातार मिलने के दौरान मुझे यह स्नैपशॉट मिला ।