日期:2014-05-17  浏览次数:20651 次

请教个HttpURLConnection远程连接的问题
if (http_conn.getResponseCode() == 200) {
    BufferedReader in = new BufferedReader(new InputStreamReader(
    (InputStream) http_conn.getInputStream(), "UTF-8"));
    msg = in.readLine();
    in.close();
}

debug时发现当判断http_conn.getResponseCode()是否是200的时候,请求已经发到服务器了。我的问题如果在服务器处理过程中网络断了,客户端就收不到服务器的返回值,该如何捕捉到这个错误,并作为异常抛出来。现在的情况是我把网断了以后,程序就没有反应了,没有任何异常抛出来。
------最佳解决方案--------------------
引用:
需求是要将数据发送到服务器上,在服务器进行处理再将结果返回。
在连接前已经设置了连接超时和读取超时,数据发送到服务器并进行处理之后我把服务器的网线拔掉,程序没有任何响应,也没有抛出异常,下边是我的代码,大家帮我看看哪有问题,谢谢


这两句话设置的太晚了,要在最开始就设置:
http_conn.setConnectTimeout(20 * 1000);
http_conn.setReadTimeout(20 * 1000);

刚准备好对象后就要立即设置,否则你都连接上去了,还设置有鬼用啊?
http_conn = (HttpURLConnection) url.openConnection();
http_conn.setConnectTimeout(20 * 1000);
http_conn.setReadTimeout(20 * 1000);
http_conn.setDoOutput(true);
http_conn.setRequestMethod("POST");
------其他解决方案--------------------
试了一下,可以抛出异常java.net.UnknownHostException:
HttpURLConnection urlConnection = null;
try {

URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
//
urlConnection.setRequestMethod("Get");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.setUseCaches(false);


responseCode = urlConnection.getResponseCode();


if (responseCode == HttpURLConnection.HTTP_OK) {
String inputLine = null;
in = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream(), "UTF-8"));// 注意,此处UTF-8
while ((inputLine = in.readLine()) != null) {
sb.append(inputLine);
}
}
return sb.toString();
//System.out.println(sb.toString());

} catch (IOException e) {
e.printStackTrace();

------其他解决方案--------------------
连接前,先设置 setConnectTimeout(毫秒) 这个是连接过程中的超时,可以设置小点,比如 10 秒。

另外一个应该设置的是:setReadTimeout(毫秒),那么读取过程中网络中断等原因超时,就会抛出异常来的,这个可以设置大点,毕竟页面可能很大,下载需要一定时间,比如 2 分钟。
------其他解决方案--------------------
学习来了,想知道具体需求是怎样的。还是只是为了调试
------其他解决方案--------------------
需求是要将数据发送到服务器上,在服务器进行处理再将结果返回。
在连接前已经设置了连接超时和读取超时,数据发送到服务器并进行处理之后我把服务器的网线拔掉,程序没有任何响应,也没有抛出异常,下边是我的代码,大家帮我看看哪有问题,谢谢


try{
http_conn = (HttpURLConnection) url.openConnection();
http_conn.setDoOutput(true);
http_conn.setRequestMethod("POST");
http_conn.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
StringBuffer str_buf = new StringBuffer();
for (int i = 0; i < param.length; i++) {
str_buf.append(param[i]).append("=").append(value[i]).append("&");
}
json = value[1];
OutputStream outStream = http_conn.getOutpu