Android HttpURLConnection偶尔报错java.net.SocketException: Connection reset,如何解决,请给我一份详细的代码
时间: 2023-08-22 13:05:51 浏览: 315
Android HttpURLConnection
4星 · 用户满意度95%
这个错误通常是由于网络连接中断或服务器关闭连接导致的。以下是几种可能的解决方案:
1. 重试机制:在捕获异常后,可以尝试重新连接服务器,直到成功或达到最大重试次数。
2. 增加超时时间:可以通过设置连接和读取数据的超时时间来避免因网络延迟而导致的连接中断。
3. 使用HTTPS协议:如果您正在使用HTTP协议,可以尝试使用HTTPS协议来发送请求,因为HTTPS具有更好的稳定性和安全性。
下面是一个使用HttpURLConnection的示例代码,包括重试机制和超时设置:
```
public String sendHttpRequest(String urlStr) {
HttpURLConnection conn = null;
InputStream is = null;
BufferedReader br = null;
String result = null;
int retryCount = 0;
int maxRetry = 3;
int timeout = 5000;
while (retryCount < maxRetry) {
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(timeout);
conn.setReadTimeout(timeout);
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
is = conn.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
result = sb.toString();
break;
} else {
retryCount++;
continue;
}
} catch (SocketTimeoutException e) {
retryCount++;
continue;
} catch (IOException e) {
e.printStackTrace();
break;
} finally {
try {
if (br != null) {
br.close();
}
if (is != null) {
is.close();
}
if (conn != null) {
conn.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
```
注意:此代码仅供参考,具体实现需要根据您的需求进行修改。
阅读全文