इस स्टैक ट्रेस स्निपेट को देखते हुए
इसके कारण: java.net.SocketException: सॉफ़्टवेयर के कारण कनेक्शन निरस्त हो गया:
java.net पर सॉकेट लिखने में त्रुटि ।
मैंने निम्नलिखित सवालों के जवाब देने की कोशिश की:
- क्या कोड इस अपवाद को फेंक रहा है? (JVM? / Tomcat? / मेरा कोड?)
- इस अपवाद का कारण क्या है?
# 1 के बारे में:
सूर्य के JVM स्रोत में यह सटीक संदेश नहीं है, लेकिन मुझे लगता है कि पाठ सॉफ़्टवेयर ने कनेक्शन का गर्भपात कर दिया है: सॉकेट लिखना त्रुटि मूल के कार्यान्वयन से है SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
# 2 के बारे में
मेरा अनुमान है कि यह तब होता है जब क्लाइंट ने पूर्ण प्रतिक्रिया प्राप्त करने से पहले कनेक्शन समाप्त कर दिया है (उदाहरण के लिए एक अनुरोध भेजा गया है, लेकिन पूर्ण प्रतिक्रिया प्राप्त करने से पहले, यह बंद / समाप्त / ऑफ़लाइन हो गया)
प्रशन:
- क्या उपरोक्त धारणाएँ सही हैं (# 1 और # 2)?
- क्या इसे स्थिति से अलग किया जा सकता है: " सर्वर पर नेटवर्क त्रुटि के कारण क्लाइंट को नहीं लिख सकता है "? या कि एक ही त्रुटि संदेश प्रस्तुत करना होगा?
- और सबसे महत्वपूर्ण: क्या कोई आधिकारिक दस्तावेज (जैसे सूर्य से) उपरोक्त कहा गया है?
मुझे एक सबूत होना चाहिए कि यह स्टैक ट्रेस सॉकेट क्लाइंट की "गलती" है, और ऐसा कुछ भी नहीं है जो सर्वर इससे बचने के लिए कर सकता था। (अपवाद को पकड़ने के अलावा, या गैर सूर्य जेवीएम सॉकेटऑउटपुटस्ट्रीम का उपयोग करते हुए, हालांकि दोनों वास्तव में इस तथ्य से नहीं बचते हैं कि ग्राहक समाप्त हो गया है)
outs.write(audioBytes);
) byte[]
करने के लिए OutputStream
। जब ऑडियो पेंडिंग हो रहा हो और खेलते समय यदि उपयोगकर्ता किसी अन्य मेनू पर क्लिक करता है (जो एक सर्वर अनुरोध भेजता है) तो मुझे कंसोल पर वही त्रुटि मिली। तो क्या इस अपवाद को अनदेखा करना सुरक्षित है?