您的位置:首页 > 理论基础 > 计算机网络

Android中网络通信基于HTTP、Socket

2017-06-03 21:11 441 查看
转载自:http://blog.csdn.net/wdong_love_cl/article/details/51570961

Android网络编程分为两种:基于http协议的,和基于socket的。

基于Http协议:HttpClient、HttpURLConnection、AsyncHttpClient框架等

基于Socket:

(1)针对TCP/IP的Socket、ServerSocket

(2)针对UDP/IP的DatagramSocket、DatagramPackage

(3)Apache Mina框架

一、HttpURLConnection的实现方式

[java] view
plain copy

String response = null;  

Url url = new URL(path);  

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 新建连接实例  

connection.setConnectTimeout(20000);// 设置连接超时时间,单位毫秒  

//connection.setReadTimeout(20000);// 设置读取数据超时时间,单位毫秒  

connection.setDoInput(true);// 是否打开输入流 true|false  

connection.setRequestMethod("POST");// 提交方法POST|GET  

//connection.setUseCaches(false);// 是否缓存true|false  

//connection.setRequestProperty("accept", "*/*");  

//connection.setRequestProperty("Connection", "Keep-Alive");  

//connection.setRequestProperty("Charset", "UTF-8");  

//connection.setRequestProperty("Content-Length", String.valueOf(data.length));  

//connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  

connection.connect();// 打开连接端口  

int responseCode = conn.getResponseCode();  

BufferedReader reader = null;  

if (responseCode == 200) {  

    reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));  

    StringBuffer buffer = new StringBuffer();  

    String line = "";  

    while ((line = reader.readLine()) != null) {  

        buffer.append(line);  

    }  

    response = buffer.toString();  

} else {  

    response = "返回码:"+responseCode;  

}  

reader.close();  

conn.disconnect();  

二、HttpClient实现方式

[java] view
plain copy

HttpResponse mHttpResponse = null;  

HttpEntity mHttpEntity = null;  

//创建HttpPost对象  

//HttpPost httppost = new HttpPost(path);  

//设置httpPost请求参数  

//httppost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));  

HttpGet httpGet = new HttpGet(path);     

HttpClient httpClient = new DefaultHttpClient();  

InputStream inputStream = null;  

BufferedReader bufReader = null;  

String result = "";  

// 发送请求并获得响应对象  

mHttpResponse = httpClient.execute(httpGet);//如果是“POST”方式就传httppost   

if (mHttpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  

    // 获得响应的消息实体  

    mHttpEntity = mHttpResponse.getEntity();  

    // 获取一个输入流  

    inputStream = mHttpEntity.getContent();  

    bufReader = new BufferedReader(new InputStreamReader(inputStream));   

    String line = "";  

    while (null != (line = bufReader.readLine())) {  

        result += line;  

    }  

    //result = EntityUtils.toString(mHttpResponse.getEntity());  

}   

if (inputStream != null) {  

    inputStream.close();  

}  

bufReader.close();  

if (httpClient != null) {  

    httpClient.getConnectionManager().shutdown();  

}  

三、实用AsyncHttpClient框架的实现方式:

[java] view
plain copy

AsyncHttpClient client = new AsyncHttpClient();    

client.get(url, new AsyncHttpResponseHandler() {    

    @Override    

    public void onSuccess(int i, Header[] headers, byte[] bytes) {                

        String response = new String(bytes, 0, bytes.length, "UTF-8");                       

    }    

    @Override    

    public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {    

  

    }    

});   

四、使用WebView视图组件显示网页。

[java] view
plain copy

myWebView.getSettings().setJavaScriptEnabled(true);    

myWebView.setWebViewClient(new WebViewClient() {    

    @Override    

    public boolean shouldOverrideUrlLoading(WebView view, String url) {    

        view.loadUrl(url);    

        return true;    

    }    

});    

myWebView.loadUrl("http://"+networkAddress);    

小提示:

对于HttpClient和HttpURLConnection我们该怎么选择呢?

Android 2.2版本之前,由于HttpClient有较少的bug,因此我们选择它来使用。然而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。HttpUrlConnection对大部分工作进行了包装,屏蔽了不需要的细节,体积较小,因而非常适用于Android项目。并且HttpUrlConnection直接在系统层面做了缓存策略处理,可以加快重复请求的速度。由于其压缩(GZip)和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在后续Google官方会将更多的时间放在优化HttpURLConnection上面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐