很久没有跟新了,自己的承诺都没有兑现,对不起各位关注支持我的,更对不起自己。对于有些问题,没有回答的话,麻烦你再提一下,我找不清楚哪些回答了,sorry。
上次说到Demo的socket 链接,先看HTTP请求。
当然要理解这个,得知道一个HTTP请求是什么样子的和HTTP协议的交互过程。要详细了解 可以看 RFC 标准文档。简单来说,HTTP 协议是请求应答模式,客户端发一个请求,服务器短发一个答复。客户端说:要xxx网页,服务器就把xxx网页返回给你。交互就需要一个规范,这个就是请求和应答的头,比如 请求的第一行: GET /index.html HTTP/1.1 就表示要获得 index.html。(如果要在命令行下模拟,可以输入 telnet www.baidu.com 80 , 链接成功后,输入 GET / HTTP/1.1 回车回车,就能获得baidu首页了,这个过程就是模拟了想服务器发送了一个最简单的HTTP 请求)
简单过程分析如下:
1 分析URL 把域名,请求地址,和 端口 拆分开
2 进行域名解析,也就是把网址解析成ip地址,这个是异步的过程
3 等解析完成之后,对这个ip地址进行链接
4 链接成功,组装HTTP 请求 头,发送数据
5 如果发送成功,那么一会就会收到通知,有数据可读
6 收到可读消息后,读取内容。
7 交互完成,关闭socket
具体代码分析:
int en_soc_demo_http_send_request(void) { // 是否初始化 if (soc_demo_transaction) { // 当前状态, HTTP_DNS_QUERY 表示第一步需要域名解析 if (soc_demo_transaction->state == HTTP_DNS_QUERY && (soc_demo_app_http_url_struct*) soc_demo_transaction->url_parsed_info == NULL) { // 解析URL,主要是把域名,请求地址,端口区分出来 // 比如 http://blog.csdn.net/yanwuxufeng 域名是 http://blog.csdn.net // 请求地址是yanwuxufeng ,端口默认是 80 soc_demo_transaction->url_parsed_info = (soc_demo_app_http_url_struct*) en_soc_demo_http_get_parsed_url( soc_demo_transaction->url, soc_demo_transaction->url_len); if (soc_demo_transaction->url_parsed_info) { // 根据域名,获取域名的ip地址 // 这是个异步的过程,回调函数得到结果 (
MTK socket 小结 5
最新推荐文章于 2022-05-20 19:49:45 发布
本文总结了MTK平台上的socket通信,重点介绍了HTTP请求的流程,包括URL分析、域名解析、连接建立、请求头构造、数据发送、接收响应及关闭连接等步骤。通过示例代码对每个环节进行了简单分析。
摘要由CSDN通过智能技术生成