काम नहीं करता है मैंने एक प्रोग्राम लिखा है जो यादृच्छिक प्रॉक्सी के माध्यम से किसी वेबसाइट पर एक प्रेस्प्लेप्लोकनेक्शन खोलता है। मेरा प्रेजेंटपुर्नल कनेक्शन को कॉन कहा जाता है। अब मुझे पता है कि उनमें से कुछ प्रॉक्सी बहुत धीमी हो सकती हैं, इसलिए मैंने conn.setConnectTimeout(40000)
और conn.setReadTimeout(40000)
के साथ 40000 मिलीसेकंड के कनेक्शन का टाइमआउट सेट कर दिया है।जावा HTTPUrlConnection टाइमआउट
ऐसा करने के बाद, मैं इस कोड है:
long diff = 0;
long starttime = 0;
long endtime = 0;
try
{
starttime = System.currentTimeMillis();
conn.connect();
endtime = System.currentTimeMillis();
diff = endtime - starttime;
if (endtime <= starttime + conn.getConnectTimeout())
{
//Trying to read sourecode
InputStreamReader isrConn = new InputStreamReader(conn.getInputStream());
BufferedReader brConn = new BufferedReader(isrConn);
line = brConn.readLine();
while (line != null)
{
response += line + "\t";
try
{
line = brConn.readLine();
} catch (IOException e)
{
printError("Reading sourcecode failed.");
}
}
}
else
{
response = "blabla.";
}
// If conn.connect failed
} catch (IOException e)
{
endtime = System.currentTimeMillis();
diff = endtime - starttime;
response = "Message: "+e.getMessage() +" MyTimeout:"+ conn.getConnectTimeout() +" Actual time passed: "+ diff;
e.printStackTrace();
}
वहाँ कारणों क्यों कनेक्शन विफल हो सकता है, तो कई मामलों में मैं पिछले पकड़ने के ब्लॉक करने के लिए मिलता है और निम्न आउटपुट प्राप्त कर रहे हैं:
संदेश: कनेक्शन टाइम आउट हो: कनेक्ट MyTimeout: 40000 वास्तविक समय बीत: 21012
संदेश: कनेक्शन टाइम आउट हो: कनेक्ट MyTimeout: 40000 वास्तविक समय बीत: 21,016
संदेश: कनेक्शन टाइम आउट हो: कनेक्ट MyTimeout: 40000 वास्तविक समय बीत: 21010
संदेश: कनेक्शन टाइम आउट हो: कनेक्ट MyTimeout: 40000 वास्तविक समय बीत: 21009
तो मेरे सवाल का होगा : मैंने टाइमआउट को 40000 मिलीसेकंड पर सेट कर दिया है, लेकिन मुझे लगभग 21000 मिलीसेकंड के बाद "कनेक्शन का समय समाप्त हो गया है", क्या आप में से कोई भी जानता है कि ऐसा क्यों है?
संपादित करें: विंडोज 7 का उपयोग कर रहा हूं और अब मैंने कैच-ब्लॉक में e.printStackTrace() को जोड़ा है, जैसा टिप्पणियों में बताया गया है। अब तक धन्यवाद
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient$1.run(Unknown Source)
at sun.net.www.http.HttpClient$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.http.HttpClient.privilegedOpenServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at TestThread.getSourcePage(TestThread.java:361)
at TestThread.aChecker(TestThread.java:216)
at TestThread.getNextProxy(TestThread.java:169)
at TestThread.getNextC(TestThread.java:157)
at TestThread.aChecker(TestThread.java:273)
at TestThread.getNextProxy(TestThread.java:169)
at TestThread.aChecker(TestThread.java:295)
at TestThread.getNextProxy(TestThread.java:169)
at TestThread.getNextC(TestThread.java:157)
at TestThread.run(TestThread.java:103)
at java.lang.Thread.run(Unknown Source)
Message: Connection timed out: connect MyTimeout:40000 Actual time passed: 21015
कृपया उत्पादन के रूप में चिह्नित अवैध/नीचे और अपने खुद के संदेश के वास्तविक स्टैक ट्रेस पोस्ट के बजाय बेहतर है। –
यह ओएस निर्भर हो सकता है, कृपया निर्दिष्ट करें कि कौन सा ओएस –
ब्रायन रोच द्वारा उल्लिखित है, कृपया कैच ब्लॉक में 'e.printStackTrace()' से आउटपुट पोस्ट करें। –