网络的基本知识
- IP地址和端口号
- IP地址:网络中每台计算机都必须有唯一一个IP地址做标识,用一组由“.”分隔的十进制数组成
- 端口号:具有网络功能的应用软件的标识号
网络协议
OSI七层模型 | TCP/IP概念层模型 | 功能 | TCP/IP协议族 |
---|---|---|---|
应用层 | 应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet |
表示层 | 数据格式化,代码转换,数据加密 | 没有协议 | |
会话层 | 解除或建立与别的接点的联系 | 没有协议 | |
传输层 | 传输层 | 提供端到端的接口 | TCP,UDP |
网络层 | 网络层 | 为数据包选择路由 | IP,ICMP,RIP,OSPF,BGP,ICMP |
数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU | |
物理层 | 链路层 | 以二进制数据形式在物理媒体上传输数据 | IS02110,IEEE802,IEEE802.2 |
HTTP协议
属于应用层的面向对象的协议,适用于分布式超媒体信息系统
主要特点
- 支持C/S模式
- 简单快速:只需传送请求方法和路径
- 灵活:允许传输任意类型的数据对象
- 无连接:限制每次连接只处理一个请求
- 无状态:对事物处理没有记忆功能
HTTP请求报文
由请求行、请求报头、空行和请求数据4个部分组成
HTTP响应报文
由状态行、消息报头、空行、响应正文组成
常见的状态码
- 200 OK:客户端请求成功
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:请求未经授权,这个状态代码必须和www-Authenticate报头域一起使用
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:服务器无法根据客户端的请求找到资源
- 500 Internal Server Error:服务器发生不可预估的错误
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
Android的网络编程
Http通信方式
- HttpURLConnection
- HttpClient
Socket通信方式
Android URL通信
Android HTTP URL接口的基本操作包括:
- 创建URL以及HttpURLConnection对象
- 连接参数设置
- 连接到服务器
- 向服务器写数据
- 从服务器读取数据
Android URL通信
HttpURLConnection访问HTTP资源的步骤:
- 根据URL地址创建URL对象
- 使用URL对象的openConnection()方法获取HttpURLConnection对象
- 设置连接的属性,包括GET/POST请求方式
- 输入、输出数据
- 关闭输入、输出流
- 在AndroidManifest配置文件中设置访问INTERNET的权限
GET方式:
private void get(String url){
//构造Request
Request request = new Request.Builder().url(url)
.header(“User-Agent”, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 " +
“(KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36”)
.addHeader(“Accept”,“application/json”)
.get()
.method(“GET”,null)
.build();
//发送请求,并处理回调
OkHttpClient client = HttpsUtil.handleSSLHandshakeByOkHttp();
POST方式:
private void post(String url,Map<String,String> params){
RequestBody body = setRequestBody(params);
//构造Request
Request request = new Request.Builder().url(url).post(body)
.header(“User-Agent”, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 " +
“(KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36”)
.addHeader(“Accept”,“application/json”)
.build();
//发送请求,并处理回调
OkHttpClient client = HttpsUtil.handleSSLHandshakeByOkHttp();