大多数的Android应用程序都会使用HTTP协议来发送和接收网络数据,而Android中主要提供了两种方式来进行HTTP操作,

HttpURLConnection和HttpClient。这两种方式都支持HTTPS协议、以流的形式进行上传和下载、配置超时时间、IPv6、以及连接池等功能。

一 : 首先来看一下Android下提供的网络访问相关API

a) java.net.*(标准的Java接口):包括流和数据包(datagram)sockets、Internet 协议和常见 HTTP 处理。HttpURLConnection就是这个包下的。

b) org.apache.HttpClient: Appache提供的开源包,弥补了 java.net.* 灵活性不足的缺点,DefaultHttpClient是其具体实现类。

c) android.net(android接口):也是HttpClient的实现,提供了android下的特有网络编程。如:访问WiFi,访问Android联网信息,邮件等功能。

二: Which client is best?

  Google官方文档介绍,在2.3及以后的版本中,HttpURLConnection是最好的选择,它简单的api以及轻量级非常适合Android。压缩和缓存机制降低了网路使用,提高了速度、节省了电量。新的应用应该选择使用HttpURLConnection,但在2.2之前有bug。

  但是在 链接管理 和 线程安全方面。HttpClient任然具有很大优势,其提供了大量的可扩展的稳定的APIs,但是在不破坏其兼容性的前提下 很难对其诸多API 进行修改,升级和扩展。 Google对其的优化并不积极,一般用于android2.2及以下版本中。

三: 网络协议

网络七层 , 一般编程人员接触最多的就是应用层和运输层。

OSI中的层

层级功能

TCP/IP协议族

应用层

文件传输,电子邮件,文件服务,虚拟终端

TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet

表示层

数据格式化,代码转换,数据加密

 

会话层

解除或建立与别的接点的联系

 

传输层

提供端对端的接口

TCP,UDP

网络层

为数据包选择路由

IP,ICMP,RIP,OSPF,BGP,IGMP

数据链路层

传输有地址的帧以及错误检测功能

SLIP,CSLIP,PPP,ARP,RARP,MTU

物理层

以二进制数据形式在物理媒体上传输数据

ISO2110,IEEE802。IEEE802.2

  tcp 和udp是传输层协议 ,定义的是数据传输和连接方式的规范(面向连接,TCP三层握手)(UDP不可靠的协议).主要解决数据 如何在网络中传输

  http 是应用层协议 ,定义的是传输数据的内容的规范(客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接).主要解决如何包装数据

  Socket是一组抽象编程接口(API),Socket本身不算是协议。介于传输层和应用层,向应用层提供统一的编程接口。应用层不必了解TCP/IP协议细节。直接通过对Socket接口函数的调用完成数据在IP网络的传输。

  基于TCP的Socket (HTTP)、基于UDP的Socket(SNMP)、基于RawIp的Socket(ping)、基于链路层的Socket

  HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP

  我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也 可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。

四 : 其它网络相关技术

1) WebView :HTML<------->javascript<-------->Android Java

2) Webservice :基于SOAP协议 ,简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议。

3) 服务器推送 :通过建立持久连接的方法,服务器端发送信息给手机Android用户。

——MQTT协议

——XMPP协议

——第三方推送 Android Push Notification Service

4) PhoneGap

Android 网络编程与通信协议的更多相关文章

  1. Android网络编程系列 一 TCP/IP协议族

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

  2. Android 网络编程 记录

    简单介绍 看了深入理解Android网络编程感觉不错.今天对Android网络编程进行了要点记录. 内容 Android基于网络技术和编程实践 要点 定义 描写叙述 IP协议 用于报文交换网络的一种面 ...

  3. Android网络编程只局域网传输文件

    Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...

  4. Android网络编程基础

    Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...

  5. Android网络编程系列 一 Socket抽象层

     在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...

  6. Android 网络编程 Socket

    1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...

  7. Android网络编程概述

    Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...

  8. Android网络编程http派/申请服务

    最近的研究Android网络编程知识,这里有一些想法,今晚学习.与您分享. 在实际的应用程序的开发非常需要时间appserver请求数据,那么app怎样发送请求呢?以下的代码就是当中的一种情况.使用H ...

  9. 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder

    请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...

随机推荐

  1. 查看sql server数据库各表占用空间大小

    exec sp_MSForEachTable @precommand=N' create table ##(id int identity,表名 sysname,字段数 int,记录数 int,保留空 ...

  2. POJ3185 The Water Bowls(反转法or dfs 爆搜)

    POJ3185 The Water Bowls 题目大意: 奶牛有20只碗摆成一排,用鼻子顶某只碗的话,包括左右两只在内的一共三只碗会反向,现在给出碗的初始状态,问至少要用鼻子顶多少次才能使所有碗都朝 ...

  3. php小知识点

    1.字符串可以里面的字符可以像数组一样访问,比如$s = "123";$s[1]就等于2,如果字符串为中文则会乱码,需要使用mb_substr进行截取: 2.php中的单引号(' ...

  4. javascript 计时器,消失计时器

    var setId= setInterval(function () { alert('点我'); }, 1000); onload = function () { //消灭计时器 clearInte ...

  5. kill tomcat process in window

    1.通过命令netstat -ano | findstr 8080找到tomcat所占用的process,如下图   2.执行ntsd -c q -p 7944 kill刚刚找到的process,然后 ...

  6. PHP 设计模式之观察者模式 (转载)

    介绍      现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式!这就向写文章一样,有的人喜欢文章按照套路走,比如叙事性质的文章,时间,地点,人物,事件.而有的人喜欢写杂文或者散文,有的人 ...

  7. jquery 与其他库冲突解决方案

    var j = jQuery.noConflict(); j("div p").hide(); // 基于 jQuery 的代码 $("content").st ...

  8. Python3 如何优雅地使用正则表达式(详解一)

    注:本文翻译自 Regular Expression HOWTO,小甲鱼童鞋对此做了一些注释和修改. 正则表达式介绍 正则表达式(Regular expressions 也称为 REs,或 regex ...

  9. Android之Activity生命周期简介

    概述 有图有真相,所以先上图: 上图是从Android官网截下的Activity的生命周期流程图,结构非常清晰,它描述了Activity在其生命周期中所有可能发生的情况以及发生的先后顺序,下面就将结合 ...

  10. 魅蓝3s adb interface 找不到驱动程序

    完全照搬大神的步骤就ok啦,,自己记录下,方便以后查找 Win7 x64 Eclipse无法识别手机 / adb interface有黄色感叹号,无法识别 http://blog.csdn.net/z ...