本节引言:

本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUrlConnection和 HttpClient的使用,文件的上传,下载,WebService的使用,WebView,Socket通信的使用等!

1.Android与互联网交互的三种方式

2.初始Http协议

实际开发中我们和服务端打交道一般用得都是基于Http协议的通信,所以学好Http协议是非常重要的,当然我们不用过于考虑一些细节的东西,有个大体的了解即可!都是一些概念性的东西!

(1)什么是Http协议

答:hypertext transfer protocol(超文本传输协议),TCP/IP协议的一个应用层协议,由于定义WEB浏览器和WEB服务器之间交换数据的过程,客户端连上web服务器后,若想获取web服务器中的某个web资源,需准守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。

(2)Http 1.0 与 Http 1.1的区别

答:1.0协议,客户端与web服务器建立连接后,只获得一个web资源。而1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源!

(3)Http协议的底层工作流程:

答:我们先要知道两个名词:

  • SYN(synchronous):TCP/IP 建立连接时使用的握手信号。
  • ACK(Acknowledgement):确认字符,确认发来的数据已经接收无误。

接着就到TCP/IP三次握手的概念:

  • 客户端发送syn包(syn=j)到服务器,进入SYN_SEND状态,然后等待服务器确认。
  • 服务器收到syn包,确认客户的syn(ack = j + 1),同时在自己也发送一个SYN包(syn=k), 即SYN + ACK包,服务器进入SYN_RECV状态
  • 客户端收到SYN + ACK包,向服务器发送确认包ACK(ack = k +1),发送完毕后,客户端与服务端 进入ESTABLISHED状态,完成三次握手,然后两者开始传送数据

如果还不是很清晰,我们再来看三次握手的示意图:

了解了是吧,然后我们就来看看Http操作的一个流程了:

  • 用户点击浏览器的url(超链接)web浏览器与web服务器建立连接
  • 建立连接后,客户端发送请求给服务器,请求的格式为:统一资源标识符(URL)+协议版本号(一般是1.1)+MIME信息(多个消息头)+一个空行
  • 服务端收到请求后,给予相应的返回信息,请求的格式为:协议版本号+状态行(处理结果)+多个信息头+空行+实体内容(比如返回的HTML)
  • 客户端接收服务端返回的信息,通过浏览器显示出来,然后与服务端断开连接,当然如果中途 某步发生错误的话,错误信息返回到客户端,并显示,如:经典的404错误!

(4)Http协议的业务流程

(5)Http的几种请求方式

实际开发中我们用得比较多的方式是Get和Post,但是实际开发可能还会用到其他请求方式,比如PUT,实际项目中就用到了,下面为了方便大家,就把所有的请求方式列出来吧

  • get:  请求获取Request-URI所标识的资源
  • post: 在Request-URI所标识的资源后附加新的数据
  • head: 请求获取由Request-URI所标识的资源的响应信息报头
  • put: 请求服务器存储一个资源,并用Request-URI作为其标识
  • delete:请求服务器删除Request-URI所标识的资源
  • trace: 请求服务器回送收到的请求信息,主要用于测试或诊断
  • connect:  保留将来使用
  • options: 请求查询服务器的性能,或者查询与资源相关的选项

(6)Get和Post的对比

用得最多的两个,当然要做一下对比啦!

  • GET : 在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔, 但数据容量通常不能超过2K,比如:http://xxx?username=…&pawd=…这种就是GET
  • POST: 这个则可以在请求的实体内容中向服务器发送数据,传输没有数量限制
  • 另外还有说一点,这两个玩意都是用来发送数据的,只是发送机制不一样,不要相信网上说的"GET获取服务器数据,POST向服务器发送数据",另外GET安全性非常低,POST安全性较高,但是执行效率却比post方法好,一般查询的时候我们用GET,数据增删改查的时候我们用POST

(7)Http状态码合集

当然,这些状态码只是给参考,实际上决定权决定在服务端(后台)的手上,一种方案是请求后,服务返回给我们的是状态,或者另一种,在应用不用弄得多语言的版本是最好用,直接返回给我们一串结果信息的json给我们,我们直接显示就好了,这样可以偷懒不少,下面列下状态码合集,参考 下就好:

  • 100~199 : 成功接受请求,客户端需提交下一次请求才能完成整个处理过程
  • 200: OK,客户端请求成功
  • 300~399:请求资源已移到新的地址(302,307,304)
  • 401:请求未授权,改状态代码需与WWW-Authenticate报头域一起使用
  • 403:Forbidden,服务器收到请求,但是拒绝提供服务
  • 404:Not Found,请求资源不存在,这个就不用说啦
  • 500:Internal Server Error,服务器发生不可预期的错误
  • 503:Server Unavailable,服务器当前不能处理客户端请求,一段时间后可能恢复正常

(8)Http协议的特点

概念性的东西,知道就好,别去背,百度百科的东西,直接复制粘贴:

1. 支持客户/服务器模式

2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、 HEAD、POST。每种方法规定了客户与服务器联系的类型不同。 由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求, 并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每 次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

本节小结:

本节讲解了我们在Android开发中涉及到网络方面的要完成的工具,以及讲解了Http协议的 相关概念,相信大家对Android移动端与服务器交互已经有了个模糊的映像,本节就到这里,下节我们来研究 Http协议的请求头与响应头!

Android网络编程要学的东西与Http协议学习的更多相关文章

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

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

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

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

  3. Android网络编程基础

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

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

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

  5. Android 网络编程 Socket

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

  6. Android网络编程概述

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

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

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

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

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

  9. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

随机推荐

  1. Frameset使用教程

    frame,是网页开发必须掌握的知识.例如后台架构.局部刷新,页面分割,都是frame的用途表现,尤其是后台页面制作,使用frame会给用户带来非常舒适的使用感受. frame知识点包括(frames ...

  2. Intent的属性及Intent-filter配置——指定Action、Category调用系统Activity

    Intent代表了启动某个程序组件的“意图”,实际上Intent对象不仅可以启动本应用内程序组件,也可启动Android系统的其他应用的程序组件,包括系统自带的程序组件——只要权限允许. 实际上And ...

  3. TForm类

    显示给用户的窗体有两种:有模式和无模式的.具体使用哪一种窗体,取决于是否希望用户能够同时与这个窗体和其他窗体交互. 1.当打开一个模式窗体后,用户无法与应用程序的其他部分交互,知道用户关闭了这个窗体. ...

  4. C/C++将一个整型数组拼接成一个字符串

    参考: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> #include <string.h> int ma ...

  5. JS前端的分享功能

    给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href="javascript:void(0);" onclic ...

  6. 如何快速定位到Eclipse自动添加的TODO

    把自动生成的// TODO ....前面加上todo,这样生成之后就会有编译错误,直接 ctrl+. 就到该位置了,可以删除todo留着// TODO ...,也可以ctrl+d删除一行: 不建议不生 ...

  7. lufylegend库 LBitmapData LBitmap LSprite

    lufylegend库 LBitmapData LBitmap LSprite <!DOCTYPE html> <html lang="en"> <h ...

  8. 多线程——NSThread

    创建和启动线程 一个NSThread对象就代表一条线程 // 创建.启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:self sele ...

  9. C++ 头文件系列(iterator)

    简介 该头文件围绕迭代器展开,定义了一系列与迭代器有关的概念,但最最最重要的一点就是----它和其它容器一起实现了C++容器的Iterator设计模式. Iterators are a general ...

  10. 《JAVASCRIPT高级程序设计》错误处理与调试

    一.错误处理 错误处理在程序设计中的重要性是毋庸置疑的,任何有影响力的web应用程序都需要一套完善的错误处理机制.良好的错误机制可以让用户得到提醒,知道发生了什么事. 1.try-catch语句 tr ...