Android笔记之 网络http通信
0、在认识HTTP前先认识URL
在我们认识HTTP之前,有必要先弄清楚URL的组成,比如:
http://www.******.com/china/index.htm
它的含义例如以下:
1. http://:代表超文本转移协议,通知****.comserver显示Web页,通常不用输入;
2. www:代表一个Web(万维网)server;
3.****.com/:这是装有网页的server的域名。或网站server的名称;
4.China/:为该server上的子文件夹,就好像我们的文件夹;
5.Index.htm:index.htm是目录中的一个HTML文件(网页)。
1、什么是HTTP
HTTP协议是一种应用层协议,HTTP是HyperTextTransfer
Protocol(超文本传输协议)的英文缩写。
HTTP能够通过传输层的TCP协议在client和server之间数据传输。
HTTP协议主要用于Web浏览器和Webserver之间的数据交换。
我们在使用IE或Firefox浏览网页或下载Web资源时。通过在地址栏中输入,开头的4个字母http就相当于通知浏览器使用HTTP协议来和host所确定的server进行通讯。
HTTP/1.0
这是第一个在通讯中指定版本号号的 HTTP协议版本号,至今仍被广泛採用。特别是在代理server中。
HTTP/1.1
当前版本号。持久连接被默认採用。并能非常好地配合代理server工作。
还支持以管道方式在同一时候发送多个请求,以便减少线路负载,提高传输速度。
2、HTTP工作方式
HTTP协议採用了请求/响应的工作方式。基于HTTP1.0协议的client在每次向server发出请求后,server就会向client返回响应消息(包含请求是否正确以及所请求的数据),在确认client已经收到响应消息后,服务端就会关闭网络连接(事实上是关闭TCP连接)。在这个传输数据过程中。并不保存不论什么历史信息和状态信息,因此,HTTP协议也被觉得是无状态的协议。图1描绘了HTTP1.0协议的通讯过程。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZmVuZzI0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
3、HTTP响应码
1xx:信息响应类,表示接收到请求而且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完毕指定的动作,必须接受进一步处理
4xx:client错误,客户请求包括语法错误或者是不能正确运行
5xx:服务端错误,server不能正确运行一个正确的请求
4、HTTP的请求体与回复体
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZmVuZzI0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
5、两种HTTP通信
(1)HttpURLConnection
(2)HttpClientURLConnection
以下举例说明第一种HttpURLConnection
private class DownThread extends Thread
{
// 当前线程的下载位置
private int startPos;
// 定义当前线程负责下载的文件大小
private int currentPartSize;
// 当前线程须要下载的文件块
private RandomAccessFile currentPart;
// 定义已经该线程已下载的字节数
public int length; public DownThread(int startPos, int currentPartSize,
RandomAccessFile currentPart)
{
this.startPos = startPos;
this.currentPartSize = currentPartSize;
this.currentPart = currentPart;
} @Override
public void run()
{
try
{
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url
.openConnection();
conn.setConnectTimeout(5 * 1000);
conn.setRequestMethod("GET");
conn.setRequestProperty(
"Accept",
"image/gif, image/jpeg, image/pjpeg, image/pjpeg, "
+ "application/x-shockwave-flash, application/xaml+xml, "
+ "application/vnd.ms-xpsdocument, application/x-ms-xbap, "
+ "application/x-ms-application, application/vnd.ms-excel, "
+ "application/vnd.ms-powerpoint, application/msword, */*");
conn.setRequestProperty("Accept-Language", "zh-CN");
conn.setRequestProperty("Charset", "UTF-8");
InputStream inStream = conn.getInputStream();
// 跳过startPos个字节。表明该线程仅仅下载自己负责哪部分文件。 inStream.skip(this.startPos);
byte[] buffer = new byte[1024];
int hasRead = 0;
// 读取网络数据。并写入本地文件
while (length < currentPartSize
&& (hasRead = inStream.read(buffer)) > 0)
{
currentPart.write(buffer, 0, hasRead);
// 累计该线程下载的总大小
length += hasRead;
}
currentPart.close();
inStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Android笔记之 网络http通信的更多相关文章
- Android笔记之网络-基本了解
1.3个相关API接口 Android网络编程相关的API接口与相关用途例如以下图 2. 2种网络架构模式 B/S----浏览器/server端模式,通过应用层的HTTP协议通信,不须要特定clien ...
- Android笔记之网络状态推断
1.首先当然得在 manifest 中加入检查网络状态的权限: <uses-permission android:name="android.permission.ACCESS_NET ...
- Android笔记5-与USB HID 设备通信(一)
1.了解 支持USB 主机(host)或者从机(accessary )模式最终是取决于设备的硬件,而与平台版本无关.我们可以通过usesfeature这个方法来查询自己的设备是否支持USB主从. ...
- Android网络请求通信之Volley
一.Volley简介 Volley网络框架是Google公司在2013年发布的一款Android平台上的网络请求通信库.以下是对Volley的简单归纳. Volley的优点: 使网络通信更快.更简单. ...
- Android 笔记之 Android 系统架构
Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android之Http网络编程(一)
Android应用作为一个客户端程序绝大部分都是需要进行网络请求和访问的,而http通信是一种比较常见并常用的通信方式. 在Android中http网络编程中有两种实现方式,一种是使用HttpURLC ...
- Netty 学习笔记(1)通信原理
前言 本文主要从 select 和 epoll 系统调用入手,来打开 Netty 的大门,从认识 Netty 的基础原理 —— I/O 多路复用模型开始. Netty 的通信原理 Netty 底层 ...
- Android单片机与蓝牙模块通信实例代码
Android单片机与蓝牙模块通信实例代码 参考路径:http://www.jb51.net/article/83349.htm 啦啦毕业了,毕业前要写毕业设计,需要写一个简单的蓝牙APP进行交互,通 ...
随机推荐
- mysql innobackupex 备份及恢复
----------------------------------全量备份恢复-------------------------------------1.生成一个完整的备份 innobackupe ...
- 从Dying gasp功能看Linux的响应速度(zhuan)
转自https://blog.csdn.net/qq_20405005/article/details/77967358 前一阵子在做dying gasp功能测试,过程中恰好测试到了Linux的响应速 ...
- 2018-11-3& maven
https://www.cnblogs.com/clsn/p/7944116.html#auto_id_10 http://www.runoob.com/maven/maven-creating-pr ...
- Linux删除以减号开头的文件
2014年5月5日 10:33:47 原因:文件乱码了,乱码后以减号开头,删不掉 摘抄: 文件系统出现一个文件 -C.html 如何删除/新建?rm -- "-C.html" to ...
- mysql5.7.20:安装教程
从mysql官网下载安装包:/mysql-5.7.20-linuxglibc2.12-x86_64.tar.gz #切换目录 cd /usr/local #解压下载的安装包 tar -zxvf /so ...
- CAS单点登录流程
CAS的官方站点: https://apereo.github.io/cas/5.2.x/index.html 概念解读: The TGT (Ticket Granting Ticket), stor ...
- maven正确的集成命令-U -B 等
在持续集成服务器上使用怎样的 mvn 命令集成项目,这个问题乍一看答案很显然,不就是 mvn clean install 么?事实上比较好的集成命令会稍微复杂些,下面是一些总结: 不要忘了clean: ...
- JS开发打气球游戏
JS开发打气球游戏 观视频<月薪4万的程序员有多强?半小时原生JS开发打气球游戏,征服现场数万人!> 清晨,日常打开B站,被首页此视频的标题所吸引,虽一看就是标题党,但还是没能抑制住好奇心 ...
- 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...
- rabbitMQ的安装(Windows下)
在公司接触到这一块,信息中间件的使用,在公司没有时间了解的更加深入,只是在简单的使用,这里将深入学习一番. 参考:http://blog.csdn.net/lu1005287365/article/d ...