java.net.SocketTimeoutException: Read timed out

本文介绍了一种解决Java中SocketTimeoutException问题的方法。通过配置代理服务器并调整超时设置来解决读取超时的问题。

今天在一台虚拟机上部署公司项目的时候,出现java.net.SocketTimeoutException: Read timed out的问题

最后定位到如下地方:

httpURL = new URL(url);
System.out.println("-----------url:"+url+"--------------");
connection = (HttpURLConnection) httpURL.openConnection();
System.out.println("-----------httpURL.openConnection()--------------");
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.setConnectTimeout(2000);
connection.setReadTimeout(2000);
System.out.println("-----------connection.setReadTimeout(30000)--------------");
connection.connect();
System.out.println("-----------connection.connect()--------------");
cin = connection.getInputStream();
System.out.println("-----------connection.getInputStream():"+cin.toString()+"--------------");
BufferedInputStream bci = new BufferedInputStream(cin);
System.out.println("-----------new BufferedInputStream(cin)--------------");
SAXReader reader = new SAXReader();
doc = reader.read(bci);
System.out.println("-----------doc = reader.read(bci);:"+doc.toString()+"--------------");

一开始并没有任何提示,这些提示都是后来加上去的

查了很多,大家给的提议要么就是提高机子的性能,要么就是将timeout的时间延长

提高机子的性能肯定不行了,于是我加大了timeout的时间,可是开始不行!!!!

郁闷,又看了看,网上似乎提到代理服务器好像跟这个有关,正好这时看见一个兄台提示,如是对代码做了以下修改

URL httpURL = null;
HttpURLConnection connection = null;
Document doc = null;
InputStream cin = null;
try {
Properties prop = System.getProperties();
System.getProperties().put("proxySet","true");
// 设置http访问要使用的代理服务器的地址
prop.setProperty("http.proxyHost","172.17.0.2");
// 设置http访问要使用的代理服务器的端口
prop.setProperty("http.proxyPort","8080");
httpURL = new URL(url);
System.out.println("-----------url:"+url+"--------------");
connection = (HttpURLConnection) httpURL.openConnection();
System.out.println("-----------httpURL.openConnection()--------------");
String authentication = "username:password"; // 用户名密码
String encodedLogin = new BASE64Encoder().encode(authentication.getBytes()); // 编码
connection.setRequestProperty("Proxy-Authorization", " Basic " + encodedLogin); // 授权
System.out.println("-----------connection.setRequestProperty:"+encodedLogin+"--------------");

connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.setConnectTimeout(10000);
connection.setReadTimeout(30000);
System.out.println("-----------connection.setReadTimeout(30000)--------------");
connection.connect();
System.out.println("-----------connection.connect()--------------");
cin = connection.getInputStream();
System.out.println("-----------connection.getInputStream():"+cin.toString()+"--------------");
BufferedInputStream bci = new BufferedInputStream(cin);
System.out.println("-----------new BufferedInputStream(cin)--------------");
SAXReader reader = new SAXReader();
doc = reader.read(bci);
System.out.println("-----------doc = reader.read(bci);:"+doc.toString()+"--------------");
} catch (Exception e) {
e.printStackTrace();
doc = null;
} finally {
if (cin != null) {
try {
cin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(connection!=null){
connection.disconnect();
}

}

标红的地方为修改的地方,就是为请求添加了个代理服务器

OK

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值