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的访问量到一定程度就屏蔽我了?但我过段时间再重新运行,又能采到的。
第一次做这方面的程序,没什么经验,请各位前辈帮忙,指点!非常感谢!