java.net.SocketException: Connection reset问题

sysmaid 2010-05-08 12:28:44
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:652)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)
一开始用Apache的httpClient包来做的,遇到这个异常,搞不懂怎么回事,就换了原始的url.openConnection()来建立连接,还没几天就又坏了。而且不是偶然,每次都报这个异常了。而且,Connection reset的意思该怎么理解呢?
搜索这个异常比较多是这么说 的:
a。maybe:
1,网络编程时未正确捕获java.net.SocketException, 客户端先关闭就会报这个异常;
2,数据库和应用服务器的网段不同.

b。好像说防火墙的比较多。。。。
大部分是网络的原因。提交post的东西多,然后服务器接收就超时了。。。
后面扯到WebLogic的就不贴了,我这是纯Java 的。
贴一下我建立连接的这段代码:

WebUtil webUtil = WebUtil.getInstance();
URL url = webUtil.getUrlByString(searchUrl);

try{
URLConnection conn = url.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
conn.setRequestProperty("Referer", Constants.INDEX);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();

BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream(), "GBK"));//这里抛的异常
while((line = reader.readLine()) != null){
if(count > START_COUNT){
html.add(line);
}else{
count++;
}
}
reader.close();
}catch(Exception e){
log.error("获取网页代码出错", e);
return null;
}

另一方面 的怀疑就是,我访问的目标网站是不是有保护,根据IP的访问量到一定程度就屏蔽我了?但我过段时间再重新运行,又能采到的。
第一次做这方面的程序,没什么经验,请各位前辈帮忙,指点!非常感谢!
...全文
74980 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fj359941160 2012-08-10
  • 打赏
  • 举报
回复
我也遇到了。 我是用socket发HTTP请求建立的连接。

一开始什么都正常的。 后来遇到了Connection Reset异常。 然后接下来都会出现这个异常。

我socket,输入输出流都已经关闭了。 = =。

不知道这个是什么原因造成的。


我发现这个异常是发生在客户端发HTTP请求之后准备读取服务器端返回回来的头部信息这个时候的。

sysmaid 2011-05-17
  • 打赏
  • 举报
回复
后来偶然有一次发现了。我手动访问他页面搜集数据,频率很高,大概半个小时吧,就提示我登录,不给打开页面了。
果然如此。
gigi_cg 2010-05-27
  • 打赏
  • 举报
回复
我同时也遇到同样的问题,当访问url达到一定数量的时候,就报了connection reset的错误。
sysmaid 2010-05-12
  • 打赏
  • 举报
回复
在up一次求关注~
sysmaid 2010-05-11
  • 打赏
  • 举报
回复
再次UP,请朋友们帮忙~
hq1305018 2010-05-10
  • 打赏
  • 举报
回复
服务器端重置了连接。可能是服务器达到最大限度,不能继续接受服务。
或者是像LZ所说,服务器端有流量控制.

可以试试用多线程下载工具试着连接该网站,看是否报错.
chy2012 2010-05-10
  • 打赏
  • 举报
回复
我觉得在读取时没东西传过来!输入流中出现问题
sysmaid 2010-05-10
  • 打赏
  • 举报
回复
再UP一下~
sysmaid 2010-05-10
  • 打赏
  • 举报
回复
在另外一个帖子里看到的:
http://topic.csdn.net/u/20080328/10/e08d894a-319a-4985-8407-50e103305e6c.html

第4个异常是java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error)。该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。
---------
按照第二种描述,应该说的是客户端异常了吧,我的代码每次都建立连接,如果是因为这个链接没有被释放而积累到一定数量时发生异常;但URLConnection 又没有close方法,怎么去释放(或者关闭)这个URLConnection 呢?
ZHXDD 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cs_frank 的回复:]
conn也需要关闭,某个链接连到一定时间段的时候也是需要释放资源的,否则会影响下一个链接的接入,同时也占用空间。

conn.close();
[/Quote]
同意楼上的观点
CS_frank 2010-05-08
  • 打赏
  • 举报
回复
conn也需要关闭,某个链接连到一定时间段的时候也是需要释放资源的,否则会影响下一个链接的接入,同时也占用空间。

conn.close();
sysmaid 2010-05-08
  • 打赏
  • 举报
回复
不是啊,这个conn是java.net.URLConnection ,它没有close()方法的。
sysmaid 2010-05-08
  • 打赏
  • 举报
回复
我同时做5个网站的,只有两个出现这样的情况,另三个没有。
我先按楼上所说试试。
  • 打赏
  • 举报
回复
URL 地址是什么?

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧