所以这是初学者的问题。
执行working with urls章节中的示例代码时,它会抛出:
线程“main”中的异常 java.net.SocketException:连接重置 在java.net.SocketInputStream.read(SocketInputStream.java:189)......
Origin是 openStream()方法。
以下是代码:
import java.net.*;
import java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL oracle = new URL("http://www.oracle.com/");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
in.close();
}
}
我知道有关于该主题的类似线索,但我找不到适合我的答案。
到目前为止我尝试了什么:
无论我尝试什么,我总会得到同样的错误:30秒左右不会发生任何事情,然后抛出提到的SocketException。
我根本不知道如何继续解决这个问题。有用的是获取有关连接重置前30秒内背景中发生的事情的信息。
那么实际上可能导致此异常的原因是什么?
最小的提示可能会有所帮助!谢谢!
答案 0 :(得分:2)
您的代码适用于可以连接到互联网的JVM。
基于原始问题和讨论:http://chat.stackoverflow.com/rooms/31264/discussion-between-achingfingers-and-meewok似乎要么:
我的建议是尝试:
答案 1 :(得分:0)
尝试Apache HTTPClient。我希望所有的导入都包含在内,因为这段代码没有经过测试......而且你的30s是你客户的连接超时。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URI;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
public class URLReader {
public static void main(String[] args) throws Exception {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(
CoreConnectionPNames.CONNECTION_TIMEOUT, timeOut);
httpclient.getParams().setParameter(
CoreConnectionPNames.SO_TIMEOUT, 2 * timeOut);
httpclient.getParams().setParameter(
CoreConnectionPNames.STALE_CONNECTION_CHECK, false);
httpclient.getParams().setParameter(
CoreConnectionPNames.TCP_NODELAY, true);
HttpHost proxy = new HttpHost(%proxyhost%, %proxyport%);
HttpGet httpget = new HttpGet("http://www.oracle.com");
HttpResponse resp = httpclient.execute(httpget);
respCode = resp.getStatusLine().getStatusCode();
BufferedReader br = new BufferedReader(new InputStreamReader(resp
.getEntity().getContent()));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
}