Java 如何使用URLConnection Timeout
我正在尝试对SOCKS代理列表进行排序,找出哪些代理的连接和读取时间小于1000毫秒,下面是我的代码Java 如何使用URLConnection Timeout,java,proxy,socks,Java,Proxy,Socks,我正在尝试对SOCKS代理列表进行排序,找出哪些代理的连接和读取时间小于1000毫秒,下面是我的代码 for(Proxy p : proxies) { try { URLConnection testConnection = testUrl.openConnection(p); testConnection.setConnectTimeout(TIMEOUT_VALUE); testConnectio
for(Proxy p : proxies) {
try {
URLConnection testConnection = testUrl.openConnection(p);
testConnection.setConnectTimeout(TIMEOUT_VALUE);
testConnection.setReadTimeout(TIMEOUT_VALUE);
success.add(p);
} catch(SocketTimeoutException ste) {
System.out.println("Proxy " + p.address().toString() + " timed out.");
}
}
但是他们中的每一个都通过了测试,即使我做了
TIMEOUT\u VALUE=1代码>我做错了什么?谢谢您的帮助。我想您的问题是您没有从连接中读取任何内容。如果我将TIMEOUT\u值设置得太低,则会出现异常。无论我读了所有的回答还是只读了一行,都不会影响结果的时间,我想这是因为我在一个数据包中得到了完整的答案
以下是我使用的测量值(无代理):
我用
你能加上这一行,看看它返回的值是多少吗testConnection.getConnectTimeout()
我的意思是在设置超时值后添加它。@CoolBeans它只是打印出1000,就像它应该打印的那样。我在一些非标准实现中看到了这一点,这个方法可能会忽略指定的超时。不过,我不确定这些非标准的实现是什么。多亏了这一点,对于添加的度量,我会在将其添加到成功列表之前检查所用时间是否小于超时值。再次感谢!对我有用。您还可以使用代理类来限制副作用,而不是更改系统属性(特别是在服务器等多线程环境中)。proxySet
在任何发布的JVM中都不起任何作用。
int TIMEOUT_VALUE = 1000;
try {
URL testUrl = new URL("http://google.com");
StringBuilder answer = new StringBuilder(100000);
long start = System.nanoTime();
URLConnection testConnection = testUrl.openConnection();
testConnection.setConnectTimeout(TIMEOUT_VALUE);
testConnection.setReadTimeout(TIMEOUT_VALUE);
BufferedReader in = new BufferedReader(new InputStreamReader(testConnection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
answer.append(inputLine);
answer.append("\n");
}
in.close();
long elapsed = System.nanoTime() - start;
System.out.println("Elapsed (ms): " + elapsed / 1000000);
System.out.println("Answer:");
System.out.println(answer);
} catch (SocketTimeoutException e) {
System.out.println("More than " + TIMEOUT_VALUE + " elapsed.");
}
System.getProperties().put("proxySet", "true");
System.getProperties().put("http.proxyHost", "192.168.10.121");
System.getProperties().put("http.proxyPort", "8080");
//System.getProperties().put("http.nonProxyHosts", "8080");