android程序设计学习,7.1.1 Android网络编程与Http协议学习

本文详细介绍了Android中网络编程的重要性,包括Http协议的使用、Android客户端与服务器的交互方式,如GET和POST请求,以及Http状态码和协议特点。还探讨了Http协议的三次握手过程和其与Http1.0的区别。内容涵盖了数据上传、下载和浏览等场景,适合Android开发者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标注:本文为个人学习使用,仅做自己学习参考使用,请勿转载和转发

2018-08-27: 初稿,老天鹅啊!你不知道我这月经历了什么!参考博主coder-pig

0. 引言

这一部分主要是关于Android的网络编程这一部分。

Android为什么需要网络编程呢,Http协议、自带的Json解析类解析Json、XML解析、HttpURlConnection和HttpClient的使用、文件的上传、下载WebService的使用、WebView、Socket通信的使用等

仅限于Android的客户端,主要是掌握获取与解析服务器反馈数据的能力

1. Android与服务器交互的三种方式

数据上传

使用Get/Post等方式上传数据:上传图片、文本、XML、Json数据、音视频文件、调用WebService数据,使用Socket上传大文件等

数据下载

下载网络中的数据、图片、代码文本、XML、Json数据、音视频文件、WebService的调用

数据浏览

通过WebView浏览网页,通过JS调用Android手机的东西

2. Http协议概述

实际开发中我们和服务端打交道一般都是基于Http协议的通信

2.1 什么是Http协议

Hypertext Transfer Protocol超文本传输协议,TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需要遵守一定的通讯格式,Http协议用于定义客户端与Web服务器通讯的格式。

2.2 Http 1.0 与Http1.1 的区别

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

3. Http协议的底层工作流程

3.1. 首先有两个名词

SYN(synchronous): TCP/IP建立连接时使用的握手信号

ACK(Acknowledgement): 确认字符,确认发来的数据已经接受无误

3.2. TCP/IP三次握手的概念

1.客户端发送syn包到(syn = j)到服务器,进入到SYN_SEND状态,然后等待服务器确认;

2.服务器收到syn包,确认客户的syn(ack = j + 1), 同时在自己也发送一个syn包(syn = k), 即syn + ack 包,服务器进入syn_recv状态

3.客户端收到syn + ack 包,向服务器发送确认包ack(ack = k + 1),发送完毕后,客户端与服务端进入establised状态,完成三次握手,然后两者开始传送数据

0ec72bc00194

3.3. Http操作的流程

用户点击浏览器上的url,Web浏览器与Web服务器建立连接;

建立连接后,客户端发送请求给服务器,请求格式为:统一资源标识符URL+协议版本号(一般是1.1)+MIME信息(多个消息头)+一个空行;

服务端收到请求后,给予相应的返回信息,返回格式为:协议版本号+状态行(处理结果)+多个信息头+空行+实体内容(比如返回的html)

客户端接受服务端返回信息,通过浏览器显示出来,然后与服务端断开连接;当然如果中途某步发生错误的话,错误信息会返回到客户端,并显示,比如经典的404错误

下图为原博主通过测试自己学校的教务系统的截图

HTTP请求包含的内容:

0ec72bc00194

HTTP响应包括的内容:

0ec72bc00194

3.4. Http协议的业务流程

0ec72bc00194

3.5. Http的几种请求方式

实际开发中我们使用比较多的方式就是Get和Post,但是实际开发可能还会用到其他的请求方式,比如Put等

Get: 请求获取Request-Url所表示的资源

POST:在Request-Url所标识的资源后附加新的数据

HEAD:请求获取由Request-Url所表示的资源的相应信息报头

PUT:请求服务器储存的一个资源,并用Request-Url作为其标识

Delete:请求服务器删除Request-Url所标识的资源

TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT:保留将来使用

OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项

3.6. Get和Post的对比

用的最多的两个,当然要作下对比

GET:请求的URL地址以后以 ?的形式带上交给服务器的数据,多个数据之间以 & 进行分割,但数据容量通常不能超过2K,比如http://xxx?username=...&pawd=...这个就是Get

POST:这个则可以正在请求的实体内容中向服务器发送数据,传输没有数量限制

这两个都是发送数据的,只是发送的机制不一样,不要相信网上说的“GET获得服务器数据,POSt向服务器发送数据”,另外GET安全性非常低,POST安全性较高,但是执行效率却比Post方法好,一般查询的时候我们使用GET,数据增删改的时候用Post!

3.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,服务器当前不能处理客户端请求,一段时间后可能恢复正常

3.8. Http协议的特点

支持客户/服务器模式。

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

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

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

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

CH341A编程器是一款广泛应用的通用编程设备,尤其在电子工程和嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器和其他IC芯片。这款编程器的最新版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储程序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编程器的1.3版更新,意味着它可以更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编程效率和稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗和非易失性存储的应用场景。 全功能版的CH341A编程器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编程。 使用CH341A编程器进行编程操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动程序和编程软件。在本例中,压缩包中的"CH341A_1.30"很可能是编程软件的安装程序。安装后,用户可以通过软件界面选择需要编程的芯片类型,加载待烧录的固件或数据,然后执行编程操作。编程过程中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编程器1.3版是面向电子爱好者和专业工程师的一款实用工具,其强大的兼容性和易用性使其在众多编程器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编程工作,CH341A编程器是理想的选择。通过持续的软件更新和升级,它保持了现代电子技术同步,确保用户能方便地对各种芯片进行编程和调试。
内存分区情况的分析是嵌入式系统开发中的一个重要环节,特别是在资源有限的MCU(微控制器)环境中。标题提到的工具是一款专为分析Linux环境下的`gcc-map`文件设计的工具,这类文件在编译过程结束后生成,包含了程序在目标设备内存中的布局信息。这个工具可以帮助开发者理解程序在RAM、ROM以及FLASH等存储区域的占用情况,从而进行优化。 `gcc-map`文件通常包含以下关键信息: 1. **符号表**:列出所有定义的全局和静态变量、函数以及其他符号,包括它们的地址和大小。 2. **节区分配**:显示每个代码和数据节区在内存中的位置,比如.text(代码)、.data(已初始化数据)、.bss(未初始化数据)等。 3. **内存汇总**:总览所有节区的大小,有助于评估程序的整体内存需求。 4. **重定位信息**:显示了代码和数据如何在目标地址空间中定位。 该分析工具可能提供以下功能: 1. **可视化展示**:将内存分配以图形化方式呈现,便于直观理解。 2. **详细报告**:生成详细的分析报告,列出每个符号的大小和位置。 3. **比较功能**:对比不同编译版本或配置的`map`文件,查看内存使用的变化。 4. **统计分析**:计算各种内存区域的使用率,帮助识别潜在的优化点。 5. **自定义过滤**:允许用户根据需要筛选和关注特定的符号或节区。 虽然在MCU环境中,Keil IDE自带的工具可能更方便,因为它们通常针对特定的MCU型号进行了优化,提供更加细致的硬件相关分析。然而,对于通用的Linux系统或跨平台项目,这款基于`gcc-map`的分析工具提供了更广泛的适用性。 在实际使用过程中,开发者可以利用这款工具来: - **优化内存使用**:通过分析哪些函数或数据占用过多的内存,进行代码重构或调整链接器脚本以减小体积。 - **排查内存泄漏**:结合其他工具,比如动态内存检测工具,查找可能导致内存泄漏的部分。 - **性能调优**:了解代码执行时的内存分布,有助于提高运行效率。 - **满足资源限制**:在嵌入式系统中,确保程序能在有限的内存空间内运行。 总结来说,`gcc-amap`这样的工具对于深入理解程序的内存布局和资源消耗至关重要,它能帮助开发者做出更明智的决策,优化代码以适应不同的硬件环境。在处理`map`文件时,开发者不仅能获取到程序的内存占用情况,还能进一步挖掘出可能的优化空间,从而提升系统的整体性能和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值