技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 网络编程 > java开发 > 正文

关于java Servlet 连接某个服务器地址时出现的异常java.net.SocketException: Connection reset

来源: 技术CTO 阅读:

我是第一次发帖,新人多多见谅。


本身是做Java 服务器的,很多东西用Servlet写,因为业务需要,像另外一个平台服务器进行获取某些信息,那个平台会返回我一个XML文件。


URL url = new URL("某个网址");
HttpsURLConnection urlcon = (HttpsURLConnection) url.openConnection();
urlcon.setRequestMethod("GET");//POST也试过
urlcon.connect();
InputStream in=urlcon.getInputStream();
fos = new FileOutputStream("../LoginXml/a.xml");
while ( (size = in.read(buf)) != -1) 
     {
     fos.write(buf, 0, size);
     }
fos.flush();
fos.close();



问题是只要程序一运行到urlcon.connect那里就报 Connection reset的异常,把这句去掉了,getinputStream那句也会报一样的异常。。。
由于是刚做开发的新人,很多东西不懂,希望有大神不吝赐教~
整合axis2。很简单就会解决了。
PostMethod post = new PostMethod(url);
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
client.executeMethod(post);

Header[] heads = post.getResponseHeaders();
boolean isword = false;
for(Header h : heads){
String n = h.getName();
if(n.equalsIgnoreCase("Content-Type")){
String v = h.getValue();
if(v.indexOf("application") >= 0 || v.indexOf("word") >= 0){
//下载到的资源是图片
isword = true;
break;
}
}
}

boolean success = isword;
System.out.println(" success :" + success);
if(success){
FileOutputStream out = new FileOutputStream(file);
out.write(post.getResponseBody());
out.close();
return file;
}else{
return null;
}


给你一个代码片段,目的是下载一个Word文档
post.getResponseBodyAsString() 可以直接等到文本内容(就是你说的XML)
也可以考虑用Jsoup或是HttpClient去做,会容易点,一些方法都封装好的

Jsoup就一句话  String xmlString = Jsoup.conn(URL).ignortContentType(true).get().text();.//好像是这样,具体记不清了
引用 4 楼 Tro_picana 的回复:
也可以考虑用Jsoup或是HttpClient去做,会容易点,一些方法都封装好的

Jsoup就一句话  String xmlString = Jsoup.conn(URL).ignortContentType(true).get().text();.//好像是这样,具体记不清了


尝试了你说的方法,一样报connect reset的错,我现在开始考虑是不是连接地址那边的问题了。
若是连接地址那边的问题的话,我直接把网址放在浏览器上却也能访问,太纳闷了。
不过谢谢你的解答
引用 2 楼 trocp 的回复:
PostMethod post = new PostMethod(url);
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
client.executeMethod(post);

Header[] heads = post.getResponseHeaders();
boolean isword = false;
for(Header h : heads){
String n = h.getName();
if(n.equalsIgnoreCase("Content-Type")){
String v = h.getValue();
if(v.indexOf("application") >= 0 || v.indexOf("word") >= 0){
//下载到的资源是图片
isword = true;
break;
}
}
}

boolean success = isword;
System.out.println(" success :" + success);
if(success){
FileOutputStream out = new FileOutputStream(file);
out.write(post.getResponseBody());
out.close();
return file;
}else{
return null;
}


给你一个代码片段,目的是下载一个Word文档




也用了你的方法试了一下,运行到client.executeMethod(post)还是报connection reset的异常。。。。
感谢回复
引用 6 楼 woshilzha 的回复:
Quote: 引用 2 楼 trocp 的回复:

PostMethod post = new PostMethod(url);
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
client.executeMethod(post);

Header[] heads = post.getResponseHeaders();
boolean isword = false;
for(Header h : heads){
String n = h.getName();
if(n.equalsIgnoreCase("Content-Type")){
String v = h.getValue();
if(v.indexOf("application") >= 0 || v.indexOf("word") >= 0){
//下载到的资源是图片
isword = true;
break;
}
}
}

boolean success = isword;
System.out.println(" success :" + success);
if(success){
FileOutputStream out = new FileOutputStream(file);
out.write(post.getResponseBody());
out.close();
return file;
}else{
return null;
}


给你一个代码片段,目的是下载一个Word文档




也用了你的方法试了一下,运行到client.executeMethod(post)还是报connection reset的异常。。。。
感谢回复





我是楼主
自顶一发,希望有大神解答

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^