网络编程

网络的基本概念

IP地址

网络中的每台计算机必须有一个唯一的IP地址,是一组由"."分隔的十进制数组成。

端口号

端口号能够标识计算机上正在运行的进程,每个被发送的网络数据包都包含端口号,用于将该数据帧交给具有相同端口号的应用程序处理。

网络协议

在这里插入图片描述

HTTP协议

  • 属于应用层面向对象的协议,适用于分布式超媒体信息系统
  • 主要特点
    支持C/S模式
    简单快速(只需要传送请求方法和路径)
    灵活(允许传输任意类型的数据对象)
    无连接(限制每次连接只处理一个请求)
    无状态(对事物处理没有记忆功能)

HTTP请求报文

  • 组成:请求行,请求报头,空行,请求数据
  • 请求行:声明请求方法、主机域名、资源路径&协议版本
  • 请求头:声明客户端、服务器、报文的部分信息
  • 请求体:存放需要发送的数据信息

HTTP响应报文

  • 组成:状态行,消息报头,空行,响应正文
  • 状态行:声明协议版本、状态码、状态码描述
  • 响应头:声明客户端、服务器、报文的部分信息
  • 响应体:存放需发送的数据信息

HTTPS的请求过程

在这里插入图片描述

网络编程

通信方式

  • HTTP通信方式( HTTPURLConnection,HTTPClient)
  • Socket通信方式

URL类

  • 统一资源定位符
  • 每个文件都有一个唯一的URL
  • 提供多个构造器用于创建URL对象
  • 提供多个方法访问URL对应的资源

URL通信

HTTP URL接口的基本操作

  • 创建URL及HttpURLConnection对象
  • 连接参数设置
  • 连接到服务器
  • 向服务器写数据
  • 从服务器读取数据

HttpURLConnection访问HTTP资源步骤

  • 根据URL地址创建URL对象
  • 使用URL对象的openConnection()方法获取HttpURLConnection对象
  • 设置连接的属性,包括GET/POST请求方式
  • 输入、输出数据
  • 关闭输入、输出流
  • 在AndroidManifest配置文件中设置访问INTERNET的权限

HTTPURLConnection使用的注意事项

  • 使用setConnectTimeout()方法设置连接超时,当网络不好时,Andriod系统会在超过设置时间后收回资源,中断操作
  • 通过getResponseCode()对响应码进行判断,如果返回的响应码为200,则表示连接成功
  • 在对大文件操作时,要将文件写到SDCard上
  • 操作大文件时,要边读取边写入,减少手机内存的使用
  • 对文件流操作完毕后要及时关闭
  • Android4.0后所有网络通信的操作都不能在主线程进行,需要使用独立的线程完成

常用的网络编程框架

Volley

  • Google官方推出的异步请求库,支持HTTPClient、HttpURLConnection
  • 基于网络队列,适合小数据频繁通信,请求线程池默认为4

OkHttp

  • 高性能的http库,支持同步、异步,而且支持http2、websocket协议,api简洁易用,实现了http缓存
  • Android网络访问的源码已用OkHttp代替了HttpURLConnection

Retrofit

  • 基于OkHttp封装的一套RESTful网络请求框架,底层默认采用okHttp

OkHttp特点

  • .OKHttp是Android版http客户端,非常高效,支持SPDY、连接池、GZIP和HTTP缓存
  • 默认情况下,OKHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题
  • 如果应用城西继承了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求
  • 从Android4.4开始,HttpURLConnection的底层实现采用okHttp

OkHttp开发基本思路

  • OkHttp的每次网络请求是一个Request,提供Request必要的参数url、header等,基于Request构造出一个Call对象,在调用它的execute()方法,就能取得Web Server回复的数据
  • 如果同步调用,需要在独立的线程中执行,使用异步调用,则采用回调的方式执行,在内部封装了一个请求队列
  • OkHttp依赖另一个组件okio完成高性能的I/O操作
  • 基本用法:
    • 新建一个OkHttpClient对象
    • 通过Request.Builder对象新建一个Request对象
    • 通过Request对象构造Call对象,调用enqueue()以异步的方式将call加入调度队列,等待reqeuest执行完成
    • 通过Call对象的Callback对象返回执行结果

Get同步请求

  • 当HTTP响应码位于200到300之间时,认为操作是成功的
  • response.body()返回一个ResponseBody对象,封装了HTTP响应的主体数据,它的String()方法将这些数据转换为字符串,另一个byteStream()方法则返回一个InputStream流
  • 注意事项
    • 需要独立的线程中执行网络操作
    • 对于超过1MB的响应body,应使用留的方式来处理body

Get异步请求

  • 在另外的工作线程中执行http请求,请求时不会阻塞当前的线程,所以可以再Android主线程中使用
  • 异步请求需要加入到一个请求队列中,并且要指定回调方法

Http Hearder的读写

  • 当写请求头的时候,使用header(name,value)可以设置唯一的name、value。如果已经有值,旧的将会被移除,然后添加新的
  • 使用addHeader(name,value)可以添加多值(添加,不移除已经有的)

post异步请求

  • 通过RequestBody构建请求数据

Post方式提交Multipart文件

  • MultiparBuilder可以构建复杂的HTTP Request Body,这与HTML文件上传形式兼容
  • 多块请求体中每块请求都是一个请求体,可以定义自己的请求Header,如设定Content-Disposition
  • 如果Content-Length和Content-Type可用的话,他们会被自动添加到请求Headers中

图片加载框Glide

  • Glide是由Google开源的一个图片加载库,是快速高效的Android开源媒体管理和图像加载框架
  • 将媒体解码、内存和磁盘缓存一级资源池包装成简单易用的界面
  • 加载图片的一般方法:Glide.with(Context context).load(Strint url).into(ImageView imageView);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值