精华内容
下载资源
问答
  • Android网络通信机制浅析一
    2019-01-27 17:50:32

    1.1 什么是TCP协议?
    1.2 什么是socket
    1.3 多线程的概念

    更多相关内容
  • Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口)、Org.apache接口和Android.net.*(Android网络接口)。本文详细的介绍,有兴趣的可以了解一下。
  • 比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。 HttpURLConnection HttpURLConnection在java.NET下,继承自URLConnection类,...

    一、介绍

    1、标准Java接口

    java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。 
    比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。

    HttpURLConnection

    HttpURLConnection在java.NET下,继承自URLConnection类,相对于HttpClient具有扩展性高、灵活性高,更轻量级的优点,所以Google在2.3版本之后推荐大家使用HttpURLConnection来操作网络请求。在Http通信中的POST和GET请求方式的不同。

    GET方法可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。

    POST方法的参数是放在Http请求中。

    Socket

    Socket 作为一种通信机制,处于应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。

    在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议,Socket 可以实现单机或者跨网络之间的通信,所以要有明确的Server端和Client端。

    Socket 这种通信机制实质就是TCP/IP协议的网络通信,所以也要进行三次握手。 TCP/IP通信的运行机制是首先向对方发出询问,在等到对方的response后,就给对方发数据。而相对应的UDP的通信,是不知道对方通不通,就给对方发送消息,结果就是有可能丢包。

    2、Apache接口

    对于大部分应用程序而言JDK本身提供的网络功能已远远不够,这时就需要Android提供的Apache HttpClient了。它是一个开源项目,功能更加完善,为客户端的Http编程提供高效、最新、功能丰富的工具包支持。

    HttpClient

    HttpClient是Apache对java中的HttpURLClient接口的封装,主要引用org.apache.http.**。Google在2.3版本之前推荐使用HttpClient,因为这个封装包安全性高,bug较少。

    3、android.net网络接口

    使用android.net包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。

    二、区别

    这里主要介绍使用最多的 HttpURLConnection和HttpClient的区别。

    1、HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等;HttpClient是apache的开源框架,封装了访问http的请求头,参数,内容体,响应等,使用起来比较方便。

    2、HttpClient很稳定,功能强,BUG少,容易控制细节;HttpURLConnection前期一直存在着版本兼容的问题,不过在后续的版本中已经相继修复掉了。

    3、HttpUrlConnection是Android SDK的标准实现,而HttpClient是apache的开源实现;

    4、HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但要自己写代码处理;

    5、HttpUrlConnection直接支持系统级连接池,即打开的连接不会直接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好;

    6、HttpUrlConnection直接在系统层面做了缓存策略处理,加快重复请求的速度。

    三、总结

          在安卓开发上,虽然HttpClient更好地支持很多细节的控制(如代理、COOKIE、鉴权、压缩、连接池),但相应地对开发人员要求更高,代码写起来更复杂,普通开发人员很难做到对它很好地驾驭,官方的支持也越来越少;而HttpUrlConnection对大部分工作进行了包装,屏蔽了不需要的细节,更适合开发人员直接调用,而且官方对它的支持和优化也会越来越好。我们既然是做安卓应用的开发,自然要遵循安卓官方的指引,选用HttpUrlConnection。

    展开全文
  • 在android平台目前提供了三种网络接口可以使用:分别是java.net.*(标准Java接口)、Org.apache接口和Android.net.*(Android网络接口),本文主要给大家介绍android三种网络通讯方式及android的网络通讯机制,小伙伴们...
  • Android 网络通信机制

    千次阅读 2016-09-07 19:28:48
    第三中 Android网络接口 try{ InetAddress ia = InetAddress.getByName("192.168.1.110");//IP地址 Socket sk = new Socket(inetAddress,61203,true);//端口 InputStream is =sk.getInputStream();//得到数据...

        

           简单地说有下面三种:

    第一种: java.net.* (标准java接口)

      try{
        URL url = new URL("http://www.google.com%22)//定义地址
        HttpURLConnection http = (HttpURLConnection) url.openConnection();//打开连接
        int nRC = http.getResponseCode();//得到连接状态
        if(nRC == HttpURLConnection.HTTP_OK){
         InputStream is = http.getInputStream();//取得数据
         .....//处理数据
        }
       }catch(Exception e){
        //因是连接网络,不免会出现一些异常,所以必须处理这些异常
       }
    

    第二种 Apache接口

     try{
        HttpClient hc = new DefaultHttpClient();//创建HttpClient,这里使用DefaultHttpClient表示默认属性
        HttpGet hg = new HttpGet("http://www.google.com%22);//HttpGet实例
        HttpResponse rp = hc.execute(hg);//连接
        if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
         InputStream is = rp.getEntity().getContent();
         .....//处理数据
        }
       }catch(IOEeception e){
       }
    

    第三中 Android网络接口

      try{
        InetAddress ia = InetAddress.getByName("192.168.1.110");//IP地址
        Socket sk = new Socket(inetAddress,61203,true);//端口
        InputStream is =sk.getInputStream();//得到数据
        OutputStream os = sk.getOutputStream();
        .....//数据处理
        os.close();
        is.close();
        sk.close();
       }catch(UnknownHostException e){
       }catch(IOException e){
       }
    

    展开全文
  • 详细讲解了安卓网络通信安全机制,附带了文档,工具,源代码,详细讲解了服务器端和客户端的公钥私钥的生成
  • Android--Android网络通信机制

    千次阅读 2014-09-20 10:55:04
    Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是本人在学习中的总结与归纳。 1. HttpURLConnection接口  首先需要明确的是,Http通信中的POST和GET请求方式的不同。GET可以获得...

    1. Socket接口

    不常用

    Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。
    2. HttpURLConnection接口
    首先需要明确的是,Http通信中的POST和GET请求方式的不同。GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。而POST方法的参数是放在Http请求中。因此,在编程之前,应当首先明确使用的请求方法,然后再根据所使用的方式选择相应的编程方式。
    HttpURLConnection是继承于URLConnection类,二者都是抽象类。其对象主要通过URL的openConnection方法获得。创建方法如下代码所示:

    URL url = new URL("http://www.51cto.com/index.jsp?par=123456");  
    HttpURLConnection urlConn=(HttpURLConnection)url.openConnection(); 

    通过以下方法可以对请求的属性进行一些设置,如下所示:

    //设置输入和输出流  
    urlConn.setDoOutput(true);  
    urlConn.setDoInput(true);  
    //设置请求方式为POST  
    urlConn.setRequestMethod("POST");  
    //POST请求不能使用缓存  
    urlConn.setUseCaches(false);  
    //关闭连接  
    urlConn.disConnection();
    HttpURLConnection默认使用GET方式,例如下面代码所示:

    <span style="white-space:pre">	</span>//使用HttpURLConnection打开连接  
            HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
            //得到读取的内容(流)  
            InputStreamReader in = new InputStreamReader(urlConn.getInputStream());  
            // 为输出创建BufferedReader  
            BufferedReader buffer = new BufferedReader(in);  
            String inputLine = null;  
            //使用循环来读取获得的数据  
            while (((inputLine = buffer.readLine()) != null))  
            {  
                 //我们在每一行后面加上一个"\n"来换行  
                 resultData += inputLine + "\n";  
            }           
            //关闭InputStreamReader  
            in.close();  
            //关闭http连接  
            urlConn.disconnect(); 
    如果需要使用POST方式,则需要setRequestMethod设置。代码如下:

    String httpUrl = "http://192.168.1.110:8080/httpget.jsp";  
            //获得的数据  
            String resultData = "";  
            URL url = null;  
            try 
            {  
                //构造一个URL对象  
                url = new URL(httpUrl);   
            }  
            catch (MalformedURLException e)  
            {  
                Log.e(DEBUG_TAG, "MalformedURLException");  
            }  
            if (url != null)  
            {  
                try 
                {  
                    // 使用HttpURLConnection打开连接  
                    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
                    //因为这个是post请求,设立需要设置为true  
                    urlConn.setDoOutput(true);  
                    urlConn.setDoInput(true);  
                    // 设置以POST方式  
                    urlConn.setRequestMethod("POST");  
                    // Post 请求不能使用缓存  
                    urlConn.setUseCaches(false);  
                    urlConn.setInstanceFollowRedirects(true);  
                    // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的  
                    urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
                    // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,  
                    // 要注意的是connection.getOutputStream会隐含的进行connect。  
                    urlConn.connect();  
                    //DataOutputStream流  
                    DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());  
                    //要上传的参数  
                    String content = "par=" + URLEncoder.encode("ABCDEFG", "gb2312");  
                    //将要上传的内容写入流中  
                    out.writeBytes(content);   
                    //刷新、关闭  
                    out.flush();  
                    out.close();  
    3. HttpClient接口
    使用Apache提供的HttpClient接口同样可以进行HTTP操作。
    对于GET和POST请求方法的操作有所不同。GET方法的操作代码示例如下:

    // http地址  
            String httpUrl = "http://192.168.1.110:8080/httpget.jsp?par=HttpClient_android_Get";  
            //HttpGet连接对象  
            HttpGet httpRequest = new HttpGet(httpUrl);  
             //取得HttpClient对象  
                HttpClient httpclient = new DefaultHttpClient();  
                //请求HttpClient,取得HttpResponse  
                HttpResponse httpResponse = httpclient.execute(httpRequest);  
                //请求成功  
                if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  
                {  
                    //取得返回的字符串  
                    String strResult = EntityUtils.toString(httpResponse.getEntity());  
                    mTextView.setText(strResult);  
                }  
                else 
                {  
                    mTextView.setText("请求错误!");  
                }  
            } 
    使用POST方法进行参数传递时,需要使用NameValuePair来保存要传递的参数。,另外,还需要设置所使用的字符集。代码如下所示:

    // http地址  
            String httpUrl = "http://192.168.1.110:8080/httpget.jsp";  
            //HttpPost连接对象  
            HttpPost httpRequest = new HttpPost(httpUrl);  
            //使用NameValuePair来保存要传递的Post参数  
            List<NameValuePair> params = new ArrayList<NameValuePair>();  
            //添加要传递的参数  
            params.add(new BasicNameValuePair("par", "HttpClient_android_Post"));  
            //设置字符集  
                HttpEntity httpentity = new UrlEncodedFormEntity(params, "gb2312");  
                //请求httpRequest  
                httpRequest.setEntity(httpentity);  
                //取得默认的HttpClient  
                HttpClient httpclient = new DefaultHttpClient();  
                //取得HttpResponse  
                HttpResponse httpResponse = httpclient.execute(httpRequest);  
                //HttpStatus.SC_OK表示连接成功  
                if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  
                {  
                    //取得返回的字符串  
                    String strResult = EntityUtils.toString(httpResponse.getEntity());  
                    mTextView.setText(strResult);  
                }  
                else 
                {  
                    mTextView.setText("请求错误!");  
                }  
            } 

    HttpClient实际上是对Java提供方法的一些封装,在HttpURLConnection中的输入输出流操作,在这个接口中被统一封装成了HttpPost(HttpGet)和HttpResponse,这样,就减少了操作的繁琐性。
    另外,在使用POST方式进行传输时,需要进行字符编码。


    在安卓开发上,虽然HttpClient更好地支持很多细节的控制(如代理、COOKIE、鉴权、压缩、连接池),但相应地对开发人员要求更高,代码写起来更复杂,普通开发人员很难做到对它很好地驾驭,官方的支持也越来越少;而HttpUrlConnection对大部分工作进行了包装,屏蔽了不需要的细节,更适合开发人员直接调用,而且官方对它的支持和优化也会越来越好。我们既然是做安卓应用的开发,自然要遵循安卓官方的指引,选用HttpUrlConnection。


    展开全文
  • Android网络通信机制

    2017-07-19 09:55:55
    实现网络通信机的方式 1、HTTP通信 HTTP:超文本传输协议,主要用来传输网页和表单. 短连接:以注册登录为例,客户端注册或者登录,访问服务器成功,服务器一般会将客户端请求数据存储在数据库中,然后返回给...
  • Socket 网络通信机制

    热门讨论 2012-04-25 22:00:39
    android项目,很多都会用上的网络通信这一技术,常用的就是Socket网络通信。Socket通信,基于TCP/IP协议和其它的协议和Http协议之间的桥梁,本文档列举一个简单的android项目,介绍了下Socket在android系统中是怎样...
  • 解决方法:Message Queue机制可以实现子线程与UI线程的通信。 该机制包括Handler、Message Queue、Looper。Handler可以把消息/Runnable对象发给Looper,由它把消息放入所属线程的消息队列中,然后Looper又会
  • Android通信机制网络(一)中,以Servlet为例子,通过GET和POST两种传输方式完成了服务器与Android的通信,其主要是通过RUL对象以流的方式往服务器传输内容,这章主要是通过HTTP的方式完成其通信,此种方式...
  • 相信大家都对掌握网络通信机制,熟悉TCP/IP和HTTP协议一点都不陌生吧,没错,几乎绝大部分的Android,Java等技术岗位要求都提到了这一点,笔者其实非计算机系科班出身,对这块儿内容不是很清楚。于是下定决心比较...
  • 深入理解Android进程间通信机制

    千次阅读 2020-08-29 09:34:31
    通信Android开发必不可少的一部分,不管是我们做应用App开发,还是Android系统,都使用了大量的通信通信又分为进程间通信和进程内通信,在这篇文章,我主要深入讲解Android系统所涉及到的所有进程间通信方式。...
  • android网络通信(十二)

    千次阅读 2019-05-11 11:53:06
    App开发常用的一些网络通信技术,主要包括如何使用多线程完成异步操作、如何进行HTTP接口调用与图片获取、如何实现文件上传和下载操作、如何运用Socket通信技术。 一、 多 线 程 介绍多线程技术在App开发中的具体...
  • Android中的常见通信机制和Linux中的通信机制 Handler Handler是Android系统中的一种消息传递机制,起作用是应对多线程场景。将A进程的消息传递给B线程, 实现异步消息处理。很多情况是将工作线程中需要更新UI的...
  • From:http://blog.csdn.net/xiang_j2ee/article/details/6787056 ...此次主要以Servlet为列子,介绍Android与Servlet的通信,知道了这种传输机制,其他两种都是大同小异的。  前提:创建两个工程,一个是
  • Android 网络编程、解析JSON数据(11)

    千次阅读 2021-11-18 23:04:01
    Android实现网络编程,解析JSON数据
  • android网络通信

    2013-10-21 20:00:14
    介绍了android开发中的网络通信机制
  • 套接字(socket)是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元。它是网 络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地 主机的 IP 地址,本地进程的协议端口,远...
  • Android多线程通信机制

    千次阅读 2018-08-07 16:48:58
    掌握Android的多线程通信机制,我们首先应该掌握Android中进程与线程是什么。 1. 进程 在Android中,一个应用程序就是一个独立的进程(应用运行在一个独立的环境中,可以避免其他应用程序/进程的干扰)。一般来说...
  • 分析了基于Android系统手机终端的3G网络和wIFI网络的连接机制,根据此连接机制针对当前兴起的Android系统应用程序的开发进行了分析,实现了由3G 到WIFI的无线漫游,该漫游主要是通过Android中的ListView数据显示...
  • Android网络通信的几种方式

    千次阅读 2018-06-11 17:16:04
    Android网络编程分为两种:基于http协议的,和基于socket的。 基于Http协议:HttpClient、HttpURLConnection、AsyncHttpClient框架等 基于Socket: (1)针对TCP/IP的Socket、ServerSocket (2)针对UDP/IP的...
  • 我们知道,Android的底层是使用Linux内核运行的,而Linux为了保证系统的稳定性,使用的是进程隔离的机制,也就是让不同的进程运行在不同的虚拟空间,使得不同进程之间无法共享数据,防止数据的篡改。关于多进程的...
  • 1 Android系统概述  Android是Google公司开发的基于Linux平台开源的手机操作系统,... Android系统基于Linux 2.6内核来提供系统的核心服务,例如安全机制,内存管理,进程管理,网络堆栈和驱动模块。其包含一组核心
  • 摘要:为实现Android 平台上的双网双待功能,研究Android 平台的系统架构以及Android framework 层上已经实现的双卡处理机制。提出一种在无线接口层( RIL) 上依样建立一套新的RIL Driver 处理机制,从而将双卡分别...
  • 此章主要是通过TCPServer完成Android 与PC机的通信,首先来看我们熟悉的服务器程序:      上图用主方法main其他一个Thread,然后在run方法里面无限监听发送过来的内容,如果有内容则输出。利用的是Java...
  • Android-Binder进程间通讯机制 概述 最近在学习Binder机制,在网上查阅了大量的资料,也看了老罗的Binder系列的博客和Innost的深入理解Binder系列的博客,都是从底层开始讲的,全是C代码,虽然之前学过C和C++,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,460
精华内容 21,384
关键字:

安卓网络通信机制