精华内容
下载资源
问答
  • Android下网络通信机制

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

    实现网络通信机的方式

    1、HTTP通信

    HTTP:超文本传输协议,主要用来传输网页和表单.
    短连接:以注册登录为例,客户端注册或者登录,访问服务器成功,服务器一般会将客户端请求数据存储在数据库中,然后返回给客户端注册或者登录成功的数据,最后会断开连接。等下次在登录的时候,会重新访问服务器请求数据,服务器返回数据,最后再断开。
    http通信实现:短连接
    第一步:建立连接
    URL url = new URL("http://www.qq.com");
    httpConnection = (HpptURLConnection)url.openConnection();
    第二步:发送数据给客户端
    outpuStream = httpConnection.getOutputStream();
    outpuStream.write("username=张三&"password=123456");
    第三步:接受服务器返回数据
    InputStream in = httpConnection.getInputStream();
    in.read(data);
    第四步:断开连接

    2、socket通信

    socket套接字,可以传输文本,音频等多种信息。一个连接做一件事,比如聊天和上传文件只能做一个。
    还是以注册和登录为例,客户端和服务器建立连接,此连接不关闭。注册和登录用第一次建立的连接。
    第一步:建立连接
    socket = new Socket("192.168.188.96",16888);
    第二步:发送数据给客户端
    outpuStream = socket.getOutputStream();
    outpuStream.write("username=张三&"password=123456");
    第三步:接受服务器返回数据
    InputStream in = socket.getInputStream();

    网络通信要解决的问题(部分)

    1.安全问题
    以银行客户端访问其服务端为例,比如在家访问用的电信网络,首先网络进入小区网络,然后小区网络连接电信运营商,最后该网络还要连接中国Internet主干网。所以访问过程中,这些信息有可能会泄密,而银行都有自己的证书,该证书就是以私钥对数据进行加密。银行用你的公钥对数据进行解密,成功则没有被修改。




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

    千次阅读 2013-10-10 15:04:06
    此次主要以Servlet为列子,介绍Android与Servlet的通信,知道了这种传输机制,其他两种都是大同小异的。  前提:创建两个工程,一个是web project(上),一个是android project(),如图:  

     

    在J2EE体系中,服务器发送消息到jsp、Servlet、http等页面通常采用两种传输方式:get和post。此次主要以Servlet为列子,介绍Android与Servlet的通信,知道了这种传输机制,其他两种都是大同小异的。

            前提:创建两个工程,一个是web project(上),一个是android project(下),如下图:

            get方式:

            我们知道,get机制采用的是在URL地址里面通过?号间隔,然后以name=value的形式给客户端传递参数。所以首先要在Android工程下的AndroidGetTest.java中onCreate方法定义好其URL地址以及要传递的参数,然后通过URL打开一个HttpURLConnection链接,此链接可以获得InputStream字节流对象,也是往服务端输出和从服务端返回数据的重要过程,而若服务端response.getInputStream.write(...)往andorid返回信息时候,就可以通过InputStreamReader作转换,将返回来的数据用BufferReader显示出来。具体代码如下:

            Servlet端接收数据并返回通知:

            

            Android端发送消息并接收Servlet返回的消息:

            

            核心代码已准备齐全,接下来启动Tomcat服务,运行Android,会发现两端都有数据。

    注意此时不能用中文,中文会乱码,下面会讲解讲解中文乱码的方法。

     

    post方式:

            post传输方式不在URL里传递,也正好解决了get传输量小、容易篡改及不安全等一系列不足。主要是通

    过对HttpURLConnection的设置,让其支持post传输方式,然后在通过相关属性传递参数(若需要传递中文字符,则可以通过URLEncoder编码,而在获取端采用URLDecoder解码即可)

     

    下面来看看服务器端和Android端的效果图:

     

    完成。

    展开全文
  • Android下的两种http通信机制介绍

    千次阅读 2016-06-12 17:44:28
    Android网络通信经常会用到http通信机制,而基本上目前有两个实现方式:HttpUrlConnection和HttpClient。 文本主要介绍两种方式的联系和具体实现方法
        Android网络通信经常会用到http通信机制,而基本上目前有两个实现方式:HttpUrlConnection和HttpClient。
    

    HttpUrlConnection和HttpClient的关系

    在研究一些开源网络请求框架时发现在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。后来查阅资料发现Google官方在Android 2.3以后更推荐使用HttpURLConnection来在Android下进行Http通信。

    联系

    大多数的Android应用程序都会使用HTTP协议来发送和接收网络数据,而Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient。这两种方式都支持HTTPS协议、以流的形式进行上传和下载、配置超时时间、IPv6、以及连接池等功能。

    区别

    1.HttpClient是apache的开源实现,而HttpUrlConnection是安卓标准实现,安卓SDK虽然集成了HttpClient,但官方支持的却是HttpUrlConnection;

    2.HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但要自己写代码处理;我们之前测试HttpUrlConnection的GZIP压缩在传大文件分包trunk时有问题,只适合小文件,不过这个BUG后来官方说已经修复了;

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

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

    具体实现


    首先Android下访问网络需要在Manifest文件内加上以下访问网络的权限

    <uses-permission android:name="android.permission.INTERNET"/>  

    通过HttpUrlConnection来GET数据

    /**
     * 通过HttpUrlConnection来get请求数据
     * 
     * @param url
     * @return result
     */
    public static String getByHttpUrlConn(String requestUrl) {
            StringBuffer strBuf;
    
            strBuf = new StringBuffer();
            try {
                URL url = new URL(requestUrl);
                URLConnection conn = url.openConnection();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));// 转码。
                String line = null;
                while ((line = reader.readLine()) != null)
                    strBuf.append(line + " ");
                reader.close();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return strBuf.toString();
        }
    

    通过HttpUrlConnection来POST数据

    /**
     * 通过HttpUrlConnection来post请求数据
     * 
     * @param url
     * @return result
     */
    public static String postByHttpUrlConn(String url) {
        String result = null;
        HttpURLConnection urlConnection = null;  
    try {  
        urlConnection = (HttpURLConnection) new URL(url).openConnection();  
        urlConnection.setDoInput(true);  
        urlConnection.setDoOutput(true);  
        urlConnection.setChunkedStreamingMode(0);  
        urlConnection.setRequestMethod("POST");  
        urlConnection.setRequestProperty("Content-Type", ("application/xml; charset=utf-8").replaceAll("\\s", ""));  
        urlConnection.setRequestProperty("Content-Length", String.valueOf(Xml.getBytes().length));  
        OutputStream out = urlConnection.getOutputStream();  
        out.write(Xml.getBytes());  
        out.close();  
        int responseCode = urlConnection.getResponseCode();  
        InputStream in = null;  
        if (responseCode == 200) {  
            in = new BufferedInputStream(urlConnection.getInputStream());  
        } else {  
            in = new BufferedInputStream(urlConnection.getErrorStream());  
        }  
        result = readInStream(in);  
    } catch (MalformedURLException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        urlConnection.disconnect();  
    } 
        return result;
    }

    默认的,不给urlConnection添加任何属性的话是使用Get方法,如果用Post可以:urlConnection.setDoOutput(true);
    urlConnection.setRequestMethod(“POST”);

    当然还可以用setRequestProperty方法给请求添加:Host,Content-Type,Content-Lenth,Authentication等参数再使用Post的时候还有一个注意点在官方文档中提及的:上传数据到服务器时为了达到最好的性能,你可以在知道数据固定大小长度的情况下使用 setFixedLengthStreamingMode(int) 方法,或者在不知道长度的情况下使用setChunkedStreamingMode(int)。因为如果不这样的话,HttpURLConnection 在发生请求之前是将数据全部放到内存里面的,这样浪费内存(会造成OutOfMemoryError)而且延时。这个东西再这里详细说了:http://www.mzone.cc/article/198.html

    通过HttpClient来GET数据

    public static String getByHttpClient(String baseUrl){
        String result = null;
        //先将参数放入List,再对参数进行URL编码  
        List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();  
        params.add(new BasicNameValuePair("param1", "中国"));  
        params.add(new BasicNameValuePair("param2","value2"));  
        //对参数编码  
        String param = URLEncodedUtils.format(params, "UTF-8");  
        //将URL与参数拼接  
        HttpGet getMethod = new HttpGet(baseUrl + "?" + param);  
        HttpClient httpClient = new DefaultHttpClient();  
        try {  
            HttpResponse response = httpClient.execute(getMethod); //发起GET请求  
            Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码  
            result = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (ClientProtocolException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return result;
    }

    通过HttpClient来POST数据

    public static String postByHttpClient(String url){
        String result = null;
        //先将参数放入List,再对参数进行URL编码  
        List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();  
        //和GET方式一样,先将参数放入List  
        params = new LinkedList<BasicNameValuePair>();  
        params.add(new BasicNameValuePair("param1", "Post方法"));  
        params.add(new BasicNameValuePair("param2", "第二个参数"));  
    
        try {  
            HttpPost postMethod = new HttpPost(url);  
            HttpClient httpClient = new DefaultHttpClient();  
            //将参数填入POST Entity中  
            postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); 
    
            HttpResponse response = httpClient.execute(postMethod); //执行POST方法  
            Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码  
            //获取响应内容  
            result = EntityUtils.toString(response.getEntity(), "utf-8"); 
    
        } catch (UnsupportedEncodingException e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
        } catch (ClientProtocolException e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
        } catch (IOException e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
        }   
            return result;
    }

    Ending

    以上部分代码我没有实际运行测试,如果有问题,请留言评论
    
    展开全文
  • Android 关于网络通信

    2017-07-25 09:37:10
    网络通信机制 网络由往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对...
    网络通信机制

    网络由下往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用。也可以说,TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

    TCP/IP协议

    网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通讯。

    网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机;另一个就是找到主机后如何可靠高效的进行数据传输。目前使用最广泛的因特网协议是TCP/IP协议。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。

    Socket

    我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,

    Http协议

    HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。HTTP提供了封装或者显示数据的具体形式。Socket提供了网络通信的能力。

    Https协议

    HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

    Android网络权限

    <uses-permission android:name="android.permission.INTERNET" /><-- 允许应用程序打开网络套接字 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><-- 允许应用程序访问网络连接信息 -->


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

    热门讨论 2012-04-25 22:00:39
    android项目,很多都会用上的网络通信这一技术,常用的就是Socket网络通信。Socket通信,基于TCP/IP协议和其它的协议和Http协议之间的桥梁,本文档列举一个简单的android项目,介绍了Socket在android系统中是怎样...
  • 此次主要以Servlet为列子,介绍Android与Servlet的通信,知道了这种传输机制,其他两种都是大同小异的。   前提:创建两个工程,一个是web project(上),一个是android project(),如图:   get方式...
  • Android -- NetworkFactory与NetworkAgent的通信机制 在上一篇博文中讲到,EthernetNetworkFactory包揽了Ethernet所有的网络管理操作,这其中就包含怎么样通知ConnectifyService网络状态发生变化。接下来,我们...
  • 流程结构图如下: Android网络中,在底层实现了两个虚拟串口:Command命令通道:建立或断开网络连接Data数据通道:基于TCP/IP网络通信协议的数据传输 [可分析基于TCP/IP网络通信协议的数据传输实现机制]...
  • 相信大家都对掌握网络通信机制,熟悉TCP/IP和HTTP协议一点都不陌生吧,没错,几乎绝大部分的Android,Java等技术岗位要求都提到了这一点,笔者其实非计算机系科班出身,对这块儿内容不是很清楚。于是下定决心比较...
  • 1、android的所有应用程序组件,包括Activity、Service和BroadcastReceiver都在应用程序的主线程中执行,所有的耗时处理都可能...2、关于Android ANR,Activity对于一个输入事件(例如,按一个按键)在5s的时间内没有
  • 比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。 HttpURLConnection HttpURLConnection在java.NET,继承自URLConnection类,...
  • Android手机上网实现机制

    千次阅读 2017-08-01 09:57:02
    流程结构图如下: Android网络中,在底层实现了两个虚拟串口:Command命令通道:建立或断开网络连接Data数据通道:基于TCP/IP网络通信协议的数据传输 [可分析基于TCP/IP网络通信协议的数据传输实现机制]...
  • 一、 初始化流程 每一个RenderProcessHostImpl(RenderProcessImpl)都会ChannelProxy(SyncChannel)—>...并且将this指针传递给一个类,这样发送消息时层层向传递。接收消息时则逆向传递。 网络连接建立
  • Android进阶之缓存机制与实现

    千次阅读 2016-08-25 11:50:37
    1.1 问题 Android开发本质上就是手机和互联网中的web服务器之间进行通信,就必然需要从服务端获取数据,而反复通过网络获取数据是比较耗时的,特别是访问比较多的时候,会极大影响了性能;以及在断网情况下Android...
  • android网络应用开发完全解析

    千次阅读 2015-05-27 22:08:41
    Android网络应用开发,主要有两种方式,一种是socket(是对tcp/udp协议的封装),另外一种就是使用Http协议...一、基于socket的网络通信socket是为了网络服务提供的一种机制。通信的两端都是socket。网络通信其实就是so
  • 什么是Handler机制,是Android中系统提供的一套线程间通信机制,大部分情况用于子线程和UI线程通信。 2. Android中需要线程通信的背景 Android的主线程是不允许做耗时操作的,如果在UI线程进行长时间的耗时操作,...
  • 百度android技术要求

    2012-02-28 12:23:50
    -熟悉Android下网络通信机制,对Socket通信、TCP/IP和http/https有一定理解和经验 -熟悉Android平台UI设计,熟悉常用布局 -理解面向对象设计的基本原则,熟悉常用的设计模式 -熟悉Java程序设计 -熟悉Json/X....
  • 熟悉Android开发架构和API调用 掌握APP适应不同型号手机屏幕开发技巧 熟悉Android下的数据存储  熟练Android Debug Bridge Tool 熟练Eclipse/ADT及相关工具  ...熟悉Android下网络通信机制,Socket通信、H...
  • 熟悉Android的开发人员应该都知道,实现不同进程之间通信的方法有5种...其中1,2,3,4的本质都是通过binder机制来实现的,5是通过网络套接字。 这里主要介绍第三种方法,通过Messenger实现进程通信。 一. Messen...
  • 2、熟悉Android下网络通信机制,对Socket通信、TCP/IP和http/https有一定理解和经验,熟悉Json/XML。 3、熟悉多线程、SQLite数据库等操作、了解面向对象设计的基本原则,熟悉常用的设计模式。 4、精通Java及相关...
  • Android系统中,定位为针对内存受限的设备,因此对性能要求更高,另外系统中采用了新的IPC(进程间通信机制,必然要求使用性能更出色的对象传输方式。在这样的环境,Parcel被设计出来,其定位就是轻量级的高效
  • 目前项目需要做一个类似微信的IM推送功能,因此首先自然是知识积累了,网上有个androidpn的...这里我就从网络通信开始,几年前写过一段时间MFC框架的C++程序,对其中的网络通信机制也有大概的了解,当然这里我们不说C++
  • Android网络操作和优化相关

    千次阅读 2016-08-01 17:25:29
    网络通信机制网络由往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/...
  • Volley框架是在Google I/O 2013上Volley发布的,目的是使Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。我们也简单了解Volley引入的背景,在Volley出现以前,我们可能面临如下的问题,比如要在...
  • 首先先介绍Linux现有的所有进程间IPC方式: 1.管道:在创建时分配一个page大小的内存,缓存区大小比较有限; 2.消息队列:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信; 3.共享内存:无须复制,共享...
  • 我们讨论了数据存储、网络通信、密码和认证策略等安全问题和解决方案,本期将继续从组件间通信、数据验证和保全保护等方面来实践Android软件安全开发之路。 组件间通信 组件间通信的安全问题是Android所独有的,也...

空空如也

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

android下网络通信机制