首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当URL打开时,为什么会出现"java.net.ConnectException:连接超时“异常?

当URL打开时,为什么会出现"java.net.ConnectException:连接超时“异常?
EN

Stack Overflow用户
提问于 2008-09-17 19:40:57
回答 8查看 490.7K关注 0票数 91

我从我的代码中得到了一个带有一些频率的ConnectException: Connection timed out。我正在尝试访问的URL已打开。相同的代码适用于某些用户,但不适用于其他用户。似乎一旦一个用户开始得到这个异常,他们就会继续得到这个异常。

下面是堆栈跟踪:

代码语言:javascript
复制
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)

下面是我的代码中的一段代码:

代码语言:javascript
复制
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);
}
EN

回答 8

Stack Overflow用户

发布于 2008-09-17 19:48:33

连接超时(假设一个本地网络和几台客户端计算机)通常是由以下原因引起的

a)途中的某种防火墙,它只是吃掉数据包,而不告诉发送者“没有到主机的路由”之类的事情

b)网络配置错误或线路过载导致丢包

c)过多的请求使服务器超载

d)服务器上有少量同时可用的线程/进程,导致所有线程/进程都被占用。这种情况尤其发生在需要很长时间运行的请求中,并且可能与c)结合在一起。

希望这能有所帮助。

票数 90
EN

Stack Overflow用户

发布于 2008-09-17 20:12:03

如果URL在同一台机器上的web浏览器中工作正常,则可能是Java代码没有使用浏览器用来连接到URL的HTTP代理。

票数 34
EN

Stack Overflow用户

发布于 2017-05-16 14:52:16

错误消息说明了一切:您的连接超时。这意味着您的请求在某个(默认)时间范围内没有得到响应。未收到响应的原因可能是以下原因之一:

a) IP/域名或端口不正确

b) IP/域或端口(即服务)已关闭

c) IP/域响应时间超过您的默认超时时间

d)您有一个防火墙,它阻止在您使用的任何端口上的请求或响应

e)您有一个防火墙,它阻止对该特定主机的请求

f)您的互联网连接已中断

g)你的直播服务器宕机了,也就是"rest-API调用“。

请注意,您的ISP可能已经安装了防火墙和端口或IP阻止

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/86824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档