2012-06-26 30 views
31

में "सॉकेट एक्सेप्शन: सहकर्मी द्वारा कनेक्शन रीसेट" प्राप्त करना मेरे ऐप को http://127.0.0.1/... (एक लोकहोस्ट यूआरएल) के माध्यम से उसी डिवाइस से संपर्क करने की आवश्यकता है।एंड्रॉइड

java.net.SocketException:

किसी कारण से, कई बार (और शायद वास्तव में 50%) का लगभग 50% है जब मैं JSON सामग्री वाली वेबसाइट वहाँ तक पहुँचने, मैं अपवाद recvfrom में विफल रहा है : ECONNRESET (सहकर्मी द्वारा कनेक्शन रीसेट)

अन्य 50% के लिए, मुझे पूरी तरह से अच्छे परिणाम मिलते हैं। मैंने चुनाव करने की कोशिश की है (और चुनावों के बीच भी बड़ी देरी), लेकिन मुझे वही अजीब परिणाम मिलते रहते हैं।

मैंने इंटरनेट की खोज की है और यहां भी, और मुझे यकीन नहीं है कि ऐसा क्यों होता है। क्या सहकर्मी का मतलब है कि ग्राहक ने इसका कारण बना दिया है? ऐसा क्यों होता है, और मुझे इसे कैसे संभालना चाहिए?

कुछ वेबसाइटें कहती हैं कि यह एक आम बात है, लेकिन मुझे नहीं मिला कि ऐसे मामलों में क्या करना सबसे अच्छा काम है।

+0

पूर्ण स्पष्टीकरण और संभावित समाधान के लिए इसे पढ़ें: http://stackoverflow.com/questions/30538640/javax-net-ssl-sslexception-read-error-ssl-0x9524b800-io-error-during-system?lq = 1 –

+1

यह भी देखें कि http://stackoverflow.com/questions/1434451/what-does-connection-reset-by-peer-mean – Raedwald

उत्तर

18

ठीक है, जवाब यह था कि यह सर्वर की गलती है - इसे प्रत्येक अनुरोध के बाद कनेक्शन बंद करना पड़ा।

यह हो सकता है कि एंड्रॉइड कनेक्शन का पूल रखे और पुराने या कुछ ऐसा इस्तेमाल करें।

वैसे भी, अब यह काम करता है।


संपादित करें: इस वर्ग के द्वारा दिया

इनपुट और आउटपुट धाराओं बफ़र नहीं हैं: HttpURLConnection के एपीआई के अनुसार, यह भी ग्राहक के पक्ष हल किया जा सकता। अधिकतर कॉलर्स को लौटाई गई स्ट्रीम को BufferedInputStream या BufferedOutputStream के साथ लपेटना चाहिए। कॉलर्स जो केवल थोक पढ़ते हैं या लिखते हैं बफरिंग छोड़ सकते हैं। सर्वर से या उससे बड़ी मात्रा में डेटा स्थानांतरित करते समय, स्ट्रीम को एक बार में कितनी डेटा याद में सीमित करने के लिए उपयोग करें। जब तक कि आपको पूरे शरीर को एक बार में स्मृति में रहने की आवश्यकता न हो, इसे स्ट्रीम के रूप में संसाधित करें (पूरे शरीर को एक बाइट सरणी या स्ट्रिंग के रूप में संग्रहीत करने के बजाय)।

विलंबता को कम करने के लिए, यह कक्षा एकाधिक अनुरोध/प्रतिक्रिया जोड़े के लिए समान अंतर्निहित सॉकेट का पुन: उपयोग कर सकती है। नतीजतन, HTTP कनेक्शन आवश्यक से अधिक लंबे समय तक खुला हो सकता है। डिस्कनेक्ट करने के लिए कॉल() सॉकेट को जुड़े सॉकेट के पूल में वापस कर सकता है। किसी भी HTTP अनुरोध जारी करने से पहले http.keepAlive सिस्टम प्रॉपर्टी को झूठी पर सेट करके को अक्षम कर दिया जा सकता है। Http.maxConnections प्रॉपर्टी का उपयोग पर किया जा सकता है यह नियंत्रित करता है कि प्रत्येक सर्वर के लिए कितने निष्क्रिय कनेक्शन होंगे।

से लिया: developer.android.com/reference/java/net/HttpURLConnection.html

+3

तो आपने इसे कैसे हल किया? क्या आप विस्तार से बता सकते हैं? मैं एक ही समस्या से पीड़ित हूं। –

+3

पाठ में लिखे गए अनुसार: "यह व्यवहार http.keepAlive सिस्टम प्रॉपर्टी को किसी HTTP अनुरोध जारी करने से पहले झूठी में सेट करके अक्षम किया जा सकता है" –

+0

ठीक है। उत्तर के लिए Thanx। –

0

जब मैं कुछ वेब पेजों पर जा रहा था या फ़ाइलों को डाउनलोड कर रहा था (मेरे ऐप या एंड्रॉइड ब्राउज़र से) तो मुझे इनमें से बहुत सारे Connection reset by peer मिल रहे थे।

बाहर निकला यह मेरा 3 जी वाहक था जो कनेक्शन को अवरुद्ध करता था (उदाहरण के लिए .exe फ़ाइल को डाउनलोड किया गया था)।

क्या आपको वाईफ़ाई पर भी यही समस्या है?

+0

संचार एक ही डिवाइस के साथ है, इसलिए मुझे उम्मीद है कि इसके साथ 0 समस्याएं संचारित होंगी वास्तव में गंभीर समस्याएं हैं। मुझे नहीं लगता कि वाईफाई बनाम 3 जी के साथ इसका कोई संबंध नहीं है, लेकिन मैं वाईफाई का उपयोग करता हूं। –

+0

मुझे लगता है कि मैंने इस सवाल को गलत समझा। 'मैं जेसन सामग्री के साथ वहां एक वेबसाइट तक पहुंचता हूं', तो आप का मतलब है कि आप फोन पर चल रहे वेब सर्वर द्वारा होस्ट की गई वेबसाइट तक पहुंचते हैं? –

+0

हां, डिवाइस क्लाइंट और सर्वर दोनों है, और वेबपृष्ठ में केवल जेसन प्रतिक्रिया शामिल है। –

1

यह एक पुरानी धागा मुझे पता है। लेकिन यह किसी की मदद कर सकता है।

मेरे मामले में यह त्रुटि .NET WCF (साबुन) सेवा के कारण हुई थी। रिटर्निंग परिणाम में ऑब्जेक्ट्स में से एक डेटामेम्बर था जिसमें {} प्रॉपर्टी है लेकिन कोई सेट {} प्रॉपर्टी नहीं है।

हर डेटामेम्बर होने के क्रमबद्ध होने के लिए दोनों को {} & सेट {} उपलब्ध होना चाहिए। मैंने एक खाली सेट लागू किया {} (मेरे व्यापार नियमों के कारण खाली), और समस्या हल हो गई।

मेरा स्केनेरियो एक विशिष्ट खराब सर्वर कार्यान्वयन है, लेकिन हो सकता है कि यह किसी समस्या निवारण के समय समय बचाने में मदद करेगा। कनेक्ट करने से पहले अपने HttpURLConnection के लिए इस गुण सेट करने के लिए

+0

यह एंड्रॉइड ओएस पर है ... –

+1

@androiddeveloper: एंड्रॉइड ओएस ग्राहक पक्ष है, लेकिन सर्वर की तरफ कुछ भी हो सकता है। तो उसका जवाब ओपी का जवाब नहीं दे सकता है, लेकिन यह किसी और का जवाब दे सकता है। +1 –

6

प्रयास करें:

conn.setRequestProperty("connection", "close"); 

यह "रखें जिंदा" संपत्ति जो डिफ़ॉल्ट रूप से है अक्षम हो जाएगा।