2011-01-07 8 views
7

मेरे पास http पर जावा क्लाइंट के लिए टॉमकैट सर्वर स्ट्रीमिंग डेटा है। यह एक फ़ाइल से बाइट्स को एक सर्वलेट में HTTPServletResponse के आउटपुटस्ट्रीम में कॉपी कर रहा है।यदि कोई टॉमकैट सर्वर "क्लाइंट निरस्त" कहता है, और ग्राहक "समयपूर्व ईओएफ" कहता है, जो सही है?

एक क्लाइंट डेटा कनेक्ट करने और पढ़ने के लिए HttpURLConnection का उपयोग करता है।

कभी-कभी सब ठीक है, अन्य बार ग्राहक और सर्वर दोनों अपवाद फेंक देते हैं।
क्लाइंट का कहना है कि "समयपूर्व ईओएफ" है।
सर्वर "क्लाइंटएबॉर्ट अपवाद" का दावा करता है।

उपरोक्त में से केवल एक नहीं है?

ग्राहक:

java.io.IOException: Premature EOF 
     at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:234) 
     at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:662) 
     at java.io.FilterInputStream.read(FilterInputStream.java:116) 
     at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669) 
     at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664)java.io.IOException: Premature EOF 
     at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:234) 
     at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:662) 
     at java.io.FilterInputStream.read(FilterInputStream.java:116) 
     at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669) 
     at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664) 

सर्वर:

ClientAbortException: java.io.IOException 
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358) 
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434) 
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349) 
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381) 
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370) 
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89) 
    ... 
Caused by: java.io.IOException 
     at org.apache.coyote.ajp.AjpAprProcessor.flush(AjpAprProcessor.java:1223) 
     at org.apache.coyote.ajp.AjpAprProcessor$SocketOutputBuffer.doWrite(AjpAprProcessor.java:1310) 
     at org.apache.coyote.Response.doWrite(Response.java:560) 
     at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) 
     ... 23 more 
+2

यदि आप लगातार इस मुद्दे को पुन: उत्पन्न कर सकते हैं, तो नेटवर्क निगरानी उपकरण जैसे वायरसहार्क का उपयोग करने पर विचार करें, जो आपको यह देखने देगा कि –

उत्तर

11

वे परस्पर अनन्य नहीं हैं।

यह स्थिति अप्रत्याशित रूप से बंद होने पर यह स्थिति हो सकती है और हो सकती है। उदाहरण के लिए, विचार करें कि क्या होगा यदि आपकी फ़ायरवॉल ने सॉकेट को समाप्त कर दिया हो। सर्वर के दृष्टिकोण से, जब डेटा लिखने की कोशिश की गई, तो सॉकेट बंद दिखाई देगी, और क्लाइंटएबॉर्ट अपवाद ट्रिगर किया जाएगा। ग्राहक के दृष्टिकोण से, बाइट्स का अगला पठन विफल हो जाएगा, जिससे समयपूर्व अंत अपवाद हो सकता है।

+0

क्या इस तरह की त्रुटियों को संभालने का कोई तरीका है? जैसा कि यहां वर्णित है, मुझे वेबसाइकिलों के साथ एक ही समस्या है: http://stackoverflow.com/questions/25662371/websocket-error-by-closing-a-page-via-browser-an-established-connection-was-ab – vdenotaris

1

मुझे पहले भी इसी तरह की समस्या हो रही थी और मैंने BufferedReader का उपयोग करके इसे हल किया लेकिन एक बार में एक बाइट पढ़ना और EOFException के लिए प्रयास करने के लिए पढ़ा। उम्मीद है की यह मदद करेगा।

संबंधित मुद्दे

 संबंधित मुद्दे