HttpClient,HttpUrlConectTion,Socket介绍

关于HttpClient、HttpUrlConection、Socket的介绍

http://www.cnitblog.com/liaoqingshan/archive/2013/02/19/86980.html


关于网络优化之HttpClient及详细介绍

http://blog.csdn.net/heng615975867/article/details/9012303


HttpClient相对于HtttpUrlConection的特点:在连接管理线程安全方面比较有优势。

如果应用程序采用了多线程进行网络访问,则应该使用Apache封装好的线程安全管理类ThreadSafeClientConnManager来进行管理。对于一个通信单元甚至是整个应用程序,Apache强烈推荐只使用一个HttpClient的实例。



例如:

/**
     * 单例模式获得HttpClient对象**/
    private static synchronized HttpClient getHttpClient() { 
    	//个人设置
    	final int DEFAULT_SOCKET_TIMEOUT=5000;
    	final int DEFAULT_HOST_CONNECTIONS=10;
    	final int DEFAULT_MAX_CONNECTIONS=100;
    	final int DEFAULT_SOCKET_BUFFER_SIZE=10;
    	
    	HttpClient httpClient=null;
        if(httpClient == null) {  
            final HttpParams httpParams = new BasicHttpParams();    
              
            // 从线程池获取连接超时  
            ConnManagerParams.setTimeout(httpParams, 1000);    
            // 连接服务器超时  
            HttpConnectionParams.setConnectionTimeout(httpParams, DEFAULT_SOCKET_TIMEOUT);  
            // 从服务器获取数据超时  
            HttpConnectionParams.setSoTimeout(httpParams, DEFAULT_SOCKET_TIMEOUT);   
              
            // 设置每台主机最多连接次数
            ConnManagerParams.setMaxConnectionsPerRoute(httpParams, new ConnPerRouteBean(DEFAULT_HOST_CONNECTIONS));    
            // 设置连接池中最多连接总数 
            ConnManagerParams.setMaxTotalConnections(httpParams, DEFAULT_MAX_CONNECTIONS);  
              
            // use expect-continue handshake  
            HttpProtocolParams.setUseExpectContinue(httpParams, true);  
            // 旧连接检查(此处设为false,不对旧连接检查)  
            HttpConnectionParams.setStaleCheckingEnabled(httpParams, false);  
              
            HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);    
            HttpProtocolParams.setContentCharset(httpParams, HTTP.UTF_8);   
                
            HttpClientParams.setRedirecting(httpParams, false);  
              
            // set user agent  
            String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6";  
            HttpProtocolParams.setUserAgent(httpParams, userAgent);       
              
            // disable Nagle algorithm  
            HttpConnectionParams.setTcpNoDelay(httpParams, true);   
              
            HttpConnectionParams.setSocketBufferSize(httpParams, DEFAULT_SOCKET_BUFFER_SIZE);    
              
            // scheme: http and https  
            SchemeRegistry schemeRegistry = new SchemeRegistry();    
            schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));    
            schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));  
      
            ClientConnectionManager manager = new ThreadSafeClientConnManager(httpParams, schemeRegistry);    
            httpClient = new DefaultHttpClient(manager, httpParams);   
        }         
          
        return httpClient;  
    }  


//执行

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        new Thread(new Runnable() {
			
			@Override
			public void run() {
				
				 String url="http://www.baidu.com/";
			        
			        HttpGet httpGet=new HttpGet(url);
			        HttpClient httpClient=getHttpClient();
			        try {
			        	
						HttpResponse response=httpClient.execute(httpGet);
						if (response.getStatusLine().getStatusCode() ==HttpStatus.SC_OK) {
							Log.i("-------请求成功---------------", "---哈哈-------");
						}
						
					} catch (ClientProtocolException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}
			        
			}
		}).start();
        
       
     
    }

//HttpClient超时设置



       //连接超时
       client.getHttpConnectionManager().getParams().setConnectionTimeout(COMMON.TIMEOUTFROMPARTNER);
       //读数据超时
       client.getHttpConnectionManager().getParams().setSoTimeout(COMMON.TIMEOUTFROMPARTNER);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值