1. 程式人生 > >網路超時設定connectionTimeout和SoTimeout的區別

網路超時設定connectionTimeout和SoTimeout的區別

就是為了記住這兩個超時時間的區別:

簡單總結為:連線時間超時connectionTimeout和讀取資料超時soTimeout

我使用的場景是在android的開源框架Xutils中使用的

http.configTimeout(30000);  連線超時     http.configSoTimeout(timeout)獲取資料超時

  一:連線超時:connectionTimeout

     1:指的是連線一個url的連線等待時間。

     2:設定方法為:

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		HttpClient client = new HttpClient();

		HttpMethod method = new GetMethod(
				"http://test.com");
		client.getHttpConnectionManager().getParams()
				.setConnectionTimeout(3000);
		client.getHttpConnectionManager().getParams().setSoTimeout(3000);
		try {
			int statusCode = client.executeMethod(method);
			System.out.println(statusCode);

			byte[] responseBody = null;

			responseBody = method.getResponseBody();

			String result = new String(responseBody);

			System.out.println(result);

		} catch (HttpException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
設定一個錯誤的url,l連線超時3000報錯

二:讀取資料超時:soTimeout

     1:指的是連線上一個url,獲取response的返回等待時間

     2:設定方法

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		HttpClient client = new HttpClient();

		HttpMethod method = new GetMethod(
				"http://localhost:8080/firstTest.htm?method=test");
		client.getHttpConnectionManager().getParams()
				.setConnectionTimeout(3000);
		client.getHttpConnectionManager().getParams().setSoTimeout(2000);
		try {
			int statusCode = client.executeMethod(method);
			System.out.println(statusCode);

			byte[] responseBody = null;

			responseBody = method.getResponseBody();

			String result = new String(responseBody);

			System.out.println(result);

		} catch (HttpException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}