HTTP协议简介
HTTP协议:h t t p协议使We b服务器和浏览器可以通过We b交换数据。它是一种请求/响应协议,即服务器等待并响应客户方请求。H T T P不维护与客户方的连接,它使用可靠的T C P连接,通常采用TCP 80端口。
客户/服务器传输过程可分为四个基一步骤: 1) 浏览器与服务器建立连接; 2) 浏览器向服务器请求文档; 3) 服务器响应浏览器请求; 4) 断开连接。 注:H T T P是一种无状态协议,它不维护连接的状态信息。
客户请求客户请求包含以下信息:请求方法请求头请求数据
(1)请求方法是用于特定U R L或We b页面的程序
HTTP请求方法方法 描述GET 请求指定的文档HEAD 仅请求文档头POST 请求服务器接收指定文档作为可执行的信息PUT 用从客户端传送的数据取代指定文档中的内容DELETE 请求服务器删除指定页面OPTIONS 允许客户端查看服务器的性能TRACE 用于测试—允许客户端查看消息回收过程(2)头信息是可选项,它用于向服务器提供客户端的其他信息如果客户采用某种方法获取数据(如P O S T ),数据就放在头( h e a d e r )之后;否则客户机等待从服务器传来的响应。
2. 服务器响应服务器响应包括以下关键部分:状态码响应头响应数据
HTTP定义了多组返回给浏览器的状态码。
响应头向客户方提供服务器和/或请求文档的信息HTTP响应头方法 描述Server Web服务器信息Date 当前日期/时间Last Modified 请求文档最近修改时间Expires 请求文档过期时间Content-length 数据长度(字节)Content-type 数据M I M E类型WWW-authenticate 用于通知客户方需要的认证信息(如用户名、口令等)如果有客户方请求的数据,数据放在响应头之后,否则服务器断开连接。
HTTP中的几个重要概念
连接:Connection
一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。
在http1.1,request和reponse头中都有可能出现一个connection的头,此header的含义是当client和server通信时对于长链接如何进行处理。
在http1.1中,client和server都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。
消息:Message
HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。
请求:Request
一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号。
响应:Response
一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。
实体:Entity
数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。
客户机:Client
一个为发送请求目的而建立连接的应用程序。
用户代理:UserAgent
初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。
服务器:Server
一个接受连接并对请求返回信息的应用程序。
代理:Proxy
一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。
代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。
网关:Gateway
一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。
网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
Android使用HTTP协议
Android基于Linux内核。目前Android平台有3种网络接口可以使用,分别是:java.net.*(标准Java接口)、org.apache(Apache接口)和android.net.*(Android 网络接口)。
在客户端这块不管怎么操作都无外乎以下几个步骤
1.建立连接
2.初始化参数
3.得到输出流,使用输出流向服务器写数据
4.得到输入流,使用输入流从服务器读数据
5.关闭连接
标准Java接口
Java.net.*(标准Java接口)提供与联网有关的类,包括流和数据包套接字、Internet协议、常见HTTP处理。比如:创建URL以及URLConnection/HttpURLConnection对象、设置连接参数、连接到服务器、向服务器写数据、从服务器读取数据等通信。
URLConnection类给应用程序和web资源之间架设起了通信的桥梁,这些web资源通常是通过url来标记的,比如http://www.baidu.com
HttpURLConnection是Java的标准类,继承自URLConnection类,URLConnection与HttpURLConnection都是抽象类,无法直接实例化对象,其对象主要通过URL的openConnection方法获得,创建一个HttpURLConnection连接的代码如下所示
URL url=new URL(pathUrl);
HttpURLConnection httpConn ; httpConn=(HttpURLConnection)url.openConnection();
创建完URLConnection或者HttpURLConnection实例后需要建立连接,同时在连接前需要设置一些属性,下面介绍一下HttpURLConnection实例的属性设置
httpConn.setDoOutput(true);//使用 URL 连接进行输出
httpConn.setDoInput(true);//使用 URL 连接进行输入
httpConn.setUseCaches(false);//忽略缓存
httpConn.setConnectTimeout(10000);//设置连接超时时间
httpConn.setRequestMethod("POST");//设置URL请求方法
… … … …
当这些属性设置完成后进行连接 httpConn.connect() ;
向服务器发送数据需要获得输出流
OutputStream os = connection.getOutputStream();
记得一定要flush()上去才能把数据发送出去。
如果要向服务器读取数据则需要获得输入流
InputStream in = connection.getInputStream()
最后关闭httpConn.disconnect();
org.apache(Apache接口)
Apache HttpClient 是一个开源项目,弥补了 java.net.* 灵活性不足的缺点,为客户端的HTTP编程提供高效、最新、功能丰富的工具包支持。Android 平台引入了 Apache HttpClient 的同时还提供了对它的一些封装和扩展,例如设置缺省的HTTP超时和缓存大小等。
以下介绍如何使用Apache接口
Header Represents an HTTP header field. (代表HTTP头部区域)
HttpEntity An entity that can be sent or received with an HTTP message.( 一个能够发送并接受HTTP信息的实体)
HttpResponse An HTTP response. (一次HTTP响应 )
HttpStatus Constants enumerating the HTTP status codes.(HTTP状态信息)
HttpConnectionParams Connection params for HTTP (HTTP连接参数)
HttpPost HttpGet 请求方式
创建 HttpParams 以用来设置 HTTP 参数(按实际需要,不设置按照缺省值处理)
HttpParams params = new BasicHttpParams();
// 设置连接超时和 Socket 超时,以及 Socket 缓存大小
HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);
HttpConnectionParams.setSoTimeout(params, 20 * 1000);
HttpConnectionParams.setSocketBufferSize(params, 8192);
… … …
创建一个 HttpClient 实例
HttpClient httpClient = new DefaultHttpClient(params);
创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向
HttpGet httpGet = new HttpGet ("http://www.baidu.com/");
或者创建HttpPost方法
URI uri = URI.create(url);
httpPost = new HttpPost(uri);
httpPost.setEntity(reqEntity);
如果要向服务器发送数据需要向HttpPost实例添加实体(HttpEntity)
HttpEntity 这个实体可以传送或者接受HTTP信息
下面是一些HttpEntity的直接子类,具体传送数据的方式按照需求选择合适的HttpEntity
AbstractHttpEntity, BasicHttpEntity, BasicManagedEntity, BufferedHttpEntity, ByteArrayEntity, EntityTemplate, FileEntity, HttpEntityWrapper, InputStreamEntity, SerializableEntity, StringEntity, UrlEncodedFormEntity
以ByteArrayEntity 为例
ByteArrayOutputStream os = new ByteArrayOutputStream();
ByteArrayEntity reqEntity = new ByteArrayEntity(os.toByteArray());
通过HttpClient将HttpPost请求发送给服务器,并且获得HttpResponse响应
HttpResponse response = httpClient.execute(httpPost);
//获取响应状态码
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
//获取HttpEntity
HttpEntity responseEntity = response.getEntity();
//得到输入流,获取从服务器端发送的数据
InputStream is = responseEntity.getContent();
最后关闭连接
httpClient.getConnectionManager().shutdown();
分享到:
相关推荐
在Android系统应用开发中,网络通信是至关重要的一个环节,特别是在构建交互性强的应用时。...通过这样的实践,学生不仅能够了解Android网络通信的原理,还能掌握实际应用中的关键技术和最佳实践。
【Android中的网络通信】 在Android应用开发中,网络通信是一个至关重要的部分,它使得设备能够与其他设备或服务器进行数据交换,实现各种丰富的功能,如聊天、邮件、新闻更新等。Android系统提供了多种网络通信...
"android网络通信方式" 在 Android 中,网络通信方式是指设备间的数据交换方式。Android 中常用的网络通信方式有 Socket 通信、HTTP 通信等。本文将详细介绍 Socket 通信在 Android 中的应用。 一、Socket 通信 ...
在Android平台上实现网络通信是移动应用开发中的常见需求,尤其是当需要与硬件设备进行数据交互时,TCP/IP通信协议常被用于建立稳定、可靠的数据传输通道。本篇将深入探讨如何在Android应用中构建TCP客户端,实现...
可能的论文会详细解析AsyncTask、IntentService、Handler-Looper机制,或者现代的RXJava、Coroutines等异步编程模型在Android网络通信中的应用。 再次,随着移动互联网的发展,WebSocket协议在实时通信中的应用...
Android提供了三种主要的网络通信接口,它们分别是:java.net.*(标准Java接口)、Org.apache接口(通常指的是HttpClient)和Android.net.*(Android网络接口)。这三种接口各有特点,适用于不同的网络通信场景。 1. **...
在Android应用开发中,网络通信是必不可少的一部分,它使得应用程序能够与远程服务器进行数据交互,实现功能如获取数据、上传用户信息等。本教程聚焦于Android安卓APP开发中的网络通信,特别是通过第三方网络请求库...
下面将详细讨论Android网络通信的6种实例代码及相关知识点。 1. **基础的Java网络API** - `java.net`包提供了基本的网络编程接口,如`Socket`和`ServerSocket`,用于TCP/IP通信,以及`DatagramSocket`和`...
在Android开发中,网络通信是应用功能不可或缺的一部分,而URL(Uniform Resource Locator)则是网络通信的基础,用于定位网络上的资源。本示例将详细介绍如何在Android应用中利用URL进行网络通信。 首先,我们需要...
在Android开发中,网络通信是应用与服务器交互的重要手段,为用户提供数据下载、上传、同步等功能。本教程将深入探讨Android基础网络通信的核心概念和技术,包括HTTP请求、HTTPS安全通信、Socket编程以及如何处理...
在Android开发中,基于Socket的网络通信是一种基础且重要的技术,它使得移动设备可以与其他设备或服务器进行数据交互。Socket源自TCP/IP协议栈,提供了一种低级别的、面向连接的、可靠的、基于字节流的通信方式。在...
Socket是网络通信中的一个端点,它允许两个应用程序通过网络进行数据交换。在Android中,我们通常使用java.net.Socket和ServerSocket类来创建和管理Socket连接。ServerSocket用于监听客户端的连接请求,而Socket则...
1. Android网络通信框架 Android系统提供了一系列API来支持网络通信,包括HttpURLConnection、HttpClient(已废弃)、OkHttp等。开发者可以根据项目需求选择合适的网络库。在WIFI通信中,通常使用Socket编程或者...
Android 的三种网络通信方式 Android 平台提供了三种网络通信方式:java.net.*(标准 Java 接口)、Org.apache 接口和 Android.net.*(Android 网络接口)。每种接口都有其特点和使用场景。 1. 标准 Java 接口java...
在网络通信中,JSON是最常见的数据交换格式。Android提供了Gson库进行对象与JSON字符串的互转,也可以使用org.json库进行手动解析。同时,Retrofit与Gson结合,可以实现自动的JSON序列化和反序列化。 五、WebSocket...
Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图: 这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限 2、写...
Android网络通信中的NFC(Near Field Communication)技术是一种短距离无线通信技术,它允许设备在近场内交换数据,通常在几厘米的距离内。NFC技术在移动设备、消费电子产品、智能卡和支付终端中广泛应用,尤其在...
消息序列化和反序列化是网络通信中的关键环节。JSON是最常用的序列化格式,Android提供了Gson库方便地进行JSON对象与Java对象之间的转换。另外,protobuf(Protocol Buffers)也是高效的数据交换格式,它产生的序列...
android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信