URL होने पर “java.net.ConnectException: कनेक्शन टाइम आउट” अपवाद क्यों होगा?


86

मुझे ConnectException: Connection timed outअपने कोड से कुछ फ्रीक्वेंसी मिल रही है । मैं जिस URL को हिट करने का प्रयास कर रहा हूं, वह है। कुछ उपयोगकर्ताओं के लिए समान कोड काम करता है, लेकिन अन्य नहीं। ऐसा लगता है जैसे एक बार एक उपयोगकर्ता इस अपवाद को प्राप्त करना शुरू कर देता है, वे अपवाद प्राप्त करना जारी रखते हैं।

यहाँ स्टैक ट्रेस है:

java.net.ConnectException: Connection timed out
Caused by: java.net.ConnectException: Connection timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.Socket.connect(Socket.java:516)
    at java.net.Socket.connect(Socket.java:466)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:365)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:477)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
    at sun.net.www.http.HttpClient.New(HttpClient.java:287)
    at sun.net.www.http.HttpClient.New(HttpClient.java:299)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:796)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:748)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:673)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:840)

यहाँ मेरे कोड से एक स्निपेट है:

URLConnection urlConnection = null;
OutputStream outputStream = null;
OutputStreamWriter outputStreamWriter = null;
InputStream inputStream = null;

try {
    URL url = new URL(urlBase);
    urlConnection = url.openConnection();
    urlConnection.setDoOutput(true);

    outputStream = urlConnection.getOutputStream(); // exception occurs on this line
    outputStreamWriter = new OutputStreamWriter(outputStream);
    outputStreamWriter.write(urlString);
    outputStreamWriter.flush();
    inputStream = urlConnection.getInputStream();
    String response = IOUtils.toString(inputStream);
    return processResponse(urlString, urlBase, response);
} catch (IOException e) {
    throw new Exception("Error querying url: " + urlString, e);
} finally {
    IoUtil.close(inputStream);
    IoUtil.close(outputStreamWriter);
    IoUtil.close(outputStream);
}

7
कृपया एक उत्तर के रूप में चिह्नित करें यदि आपने अपनी समस्या हल कर ली है :)
तोबियस

जवाबों:


84

कनेक्शन टाइमआउट (एक स्थानीय नेटवर्क और कई क्लाइंट मशीनों को संभालने) आमतौर पर परिणाम होते हैं

a) रास्ते में कुछ प्रकार के फ़ायरवॉल जो केवल प्रेषक को "नो रूट टू होस्ट" जैसी चीजों को बताए बिना पैकेट को खाते हैं।

ख) गलत नेटवर्क कॉन्फ़िगरेशन या लाइन अधिभार के कारण पैकेट हानि

c) सर्वर को ओवरलोड करने के लिए बहुत सारे अनुरोध

घ) सर्वर पर एक साथ उपलब्ध थ्रेड्स / प्रक्रियाओं की एक छोटी संख्या जो उन सभी को ले जाती है। यह विशेष रूप से उन अनुरोधों के साथ होता है जो चलाने में लंबा समय लेते हैं और सी के साथ गठबंधन कर सकते हैं)।

उम्मीद है की यह मदद करेगा।


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

31

यदि URL एक ही मशीन पर वेब ब्राउज़र में ठीक काम करता है, तो यह हो सकता है कि जावा कोड HTTP प्रॉक्सी का उपयोग नहीं कर रहा है जो ब्राउज़र URL से कनेक्ट करने के लिए उपयोग कर रहा है।


6

त्रुटि संदेश यह सब कहता है: आपके कनेक्शन का समय समाप्त हो गया है। इसका अर्थ है कि आपके अनुरोध को कुछ (डिफ़ॉल्ट) समय-सीमा के भीतर प्रतिक्रिया नहीं मिली। जिन कारणों से कोई प्रतिक्रिया नहीं मिली, उनमें से एक होने की संभावना है:

a) IP / डोमेन या पोर्ट गलत है

बी) आईपी / डोमेन या पोर्ट (यानी सेवा) नीचे है

ग) आईपी / डोमेन प्रतिक्रिया देने के लिए आपके डिफ़ॉल्ट समय से अधिक समय ले रहा है

d) आपके पास एक फ़ायरवॉल है जो आपके द्वारा उपयोग किए जा रहे पोर्ट पर अनुरोधों या प्रतिक्रियाओं को रोक रहा है

ई) आपके पास एक फ़ायरवॉल है जो उस विशेष होस्ट के अनुरोधों को रोक रहा है

च) आपका इंटरनेट एक्सेस नीचे है

छ) आपका लाइव-सर्वर डाउन है यानी "रेस्ट-एपीआई कॉल" के मामले में।

ध्यान दें कि आपके ISP द्वारा फायरवॉल और पोर्ट या IP ब्लॉकिंग हो सकती है


4

मैं आउटपुट स्ट्रीम प्राप्त करने से पहले कनेक्शन टाइमआउट समय बढ़ाने की सलाह दूंगा, जैसे:

urlConnection.setConnectTimeout(1000);

जहाँ 1000 मिलीसेकंड (1000 मिलीसेकंड = 1 सेकंड) में है।


21
वह इसे नहीं बढ़ा रहा है, यह बहुत कम कर रहा है। डिफ़ॉल्ट रूप से यह लगभग एक मिनट है, और आप इसे बढ़ा नहीं सकते हैं , आप इसे केवल कम कर सकते हैं।
लोर्न

3
  • किसी भी फ़ायरवॉल समस्या को देखने के लिए टेलनेट करने की कोशिश करें
  • प्रदर्शन tracert/ tracerouteहॉप्स की संख्या खोजने के लिए

ट्रेसरॉउट कहाँ तक?
विमान

जाहिर है, जो भी आईपी आप के साथ त्रुटि हो रही थी।
जॉन लॉर्ड

3

मैंने अपनी समस्या हल कर ली है:

System.setProperty("https.proxyHost", "myProxy");
System.setProperty("https.proxyPort", "80");

या http.proxyHost...


1

यह एक IPv6 समस्या हो सकती है (होस्ट IPv6 AAAA- पता प्रकाशित करता है और उपयोगकर्ताओं को लगता है कि यह IPv6 के लिए कॉन्फ़िगर किया गया है, लेकिन यह वास्तव में सही ढंग से जुड़ा नहीं है)। यह एक नेटवर्क MTU समस्या भी हो सकती है, एक फ़ायरवॉल ब्लॉक, या लक्ष्य होस्ट अलग-अलग आईपी पते (यादृच्छिक रूप से या मूल देश पर आधारित) प्रकाशित कर सकता है जो सभी उपलब्ध नहीं हैं। या similliar नेटवर्क की समस्याएं।

आप एक टाइमआउट सेट करने और अच्छे त्रुटि संदेशों को जोड़ने के अलावा बहुत कुछ नहीं कर सकते (विशेषकर मेजबानों के सुलझे हुए पते को प्रिंट करके)। यदि आप इसे और अधिक मजबूत बनाना चाहते हैं, तो सभी पतों के समानांतर प्रयास, जावा प्लेटफॉर्म पर नाम रिज़ॉल्यूशन कैशिंग (पॉजिटिव और नेगेटिव) देखें।


1

URL होने पर “java.net.ConnectException: कनेक्शन टाइम आउट” अपवाद क्यों होगा?

क्योंकि URLConnection (HttpURLConnection / HttpsURLConnection) अनियमित है। इसके बारे में आप यहाँ और यहाँ पढ़ सकते हैं । हमारा समाधान दो चीजें थीं:

a) के माध्यम से ContentLength सेट करें setFixedLengthStreamingMode

b) किसी भी TimeoutException को पकड़ें और विफल होने पर पुनः प्रयास करें।


0

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


0

मेरे साथ ऐसा क्यों हुआ इसका कारण यह था कि एक रिमोट सर्वर केवल निश्चित आईपी को संबोधित करने की अनुमति दे रहा था, लेकिन स्वयं की नहीं, और मैं सर्वर के यूआरएल से छवियों को प्रस्तुत करने की कोशिश कर रहा था ... इसलिए सब कुछ बस रुक जाएगा, टाइमआउट त्रुटि दिखा रहा है कि आप था...

सुनिश्चित करें कि या तो सर्वर अपने स्वयं के आईपी की अनुमति दे रहा है, या आप कुछ दूरस्थ URL से चीजें प्रदान कर रहे हैं जो वास्तव में मौजूद हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.