自学嵌入式 day33 TCP、HTTP协议(超文本传输协议)

6、黏包问题

        (1)、原因:发送方发送数据太快或者接收方接收数据太慢,导致数据在缓冲区缓存。

        (2)、解决方法:

                ①发送指定大小数据(结构体)

                问题:结构体对齐问题(比如:指定字节对齐)

                        发送数据类型多样化时,接收方难以区分接收大小

                ②为发送数据增加明显的分隔符(应用层根据分隔符进行解析)

                ③自定义应用层的数据帧

HTTP协议:应用在浏览器和服务器中

一、万维网:WWW(World Wide Web)
1、定义:世界范围内的,联机式的信息储藏所。    
2、万维网解决了获取互联网上的数据时需要解决的以下问题:
(1)、怎样标识分布在整个互联网上的文档  URL(统一资源定位符)
(2)、用什么样的协议实现万维网上的各种链接  HTTP
(3)、怎么使用户能够方便的查看文档数据 HTML (超文本标记语言)

二、URL:统一资源定位符
1、定义:表示从因特网上得到的资源位置和访问这些额资源的方法。

2、格式:<协议>://<主机>:<端口>/<路径>

三、HTTP(HyperText Transfer Protocol):超文本传输协议,应用层

1、定义:定义了万维网客户端如何想万维网服务器请求万维网文档,以及服务器怎样把文档传给客户端。

2、 HTTP工作过程:
(1)建立TCP连接
(2)客户端向服务器发送HTTP请求报文
(3)服务器向客户端发送HTTP响应报文
(4)释放TCP连接



3、HTTP报文格式
请求报文:请求行、消息报头、请求正文
响应报文:状态行、消息报头、响应正文


4、请求方式
GET     请求获取Request-URI所标识的资源
POST    在Request-URI所标识的资源后附加新的数据
HEAD    请求获取由Request-URI所标识的资源的响应消息报头
PUT     请求服务器存储一个资源,并用Request-URI作为其标识
DELETE  请求服务器删除Request-URI所标识的资源
TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
CONNECT 用于代理服务器
4.状态码

        1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

        200 OK      //客户端请求成功
400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权 
403 Forbidden  //服务器收到请求,但是拒绝提供服务
404 Not Found  //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

四、抓包(windows)

        1、

        2、

五、客户端函数

#include"head.h"

int http_tcp(const char*argv,unsigned short port)
{
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
perror("socket fail");
return -1;
}
struct sockaddr_in seraddr;
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(port);
seraddr.sin_addr.s_addr = inet_addr(argv);
int ret = connect(sockfd,(struct sockaddr*)&seraddr,sizeof(seraddr));
if(ret < 0)
{
perror("connect fail");
return -1;
}
return sockfd;
}

int http_send(int argc)
{
char *p = "GET / HTTP/1.1\r\n"
"Host: news.sohu.com\r\n"
"User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0\r\n"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n"
"Accept-Language: en-US,en;q=0.5\r\n"
"Connection: close\r\n\r\n";

    ssize_t size = send(argc,p,strlen(p),0);
if(size < 0)
{
perror("send fail");
return -1;
}
return 0;
}

int http_recv(int argc)
{
char buf[1024] = {0};
while(1)
{
memset(buf,0,sizeof(buf));
ssize_t size = recv(argc,buf,sizeof(buf) -1,0);
if(size < 0)
{
perror("recv fail");
return -1;
}
if(size == 0)
{
printf("\nconnect end");
break;
}
printf("%s",buf);
}
return 0;
}

int main()
{
int sockfd = http_tcp("1.81.2.197",80);
http_send(sockfd);
http_recv(sockfd);
close(sockfd);
return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92726.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LinuxShell 的 Here-Document(<< EOF) 笔记250723

LinuxShell 的 Here-Document(<< EOF) 笔记250723 Here-Document(<< EOF) Linux Shell Here Document (<< EOF) 终极指南 Here Document&#xff08;立即文档&#xff09;是 Shell 中用于多行输入重定向的强大功能&#xff0c;其核心语法为 << DELI…

【windows修复】解决windows10,没有【相机] 功能问题

问题: windows10,相机模块,好像是被卸载了,想重新安装 方法简介: 先下载windows store, 然后,在windows store 里面下载 相机功能: 解决: 直接下载官方离线包并手动安装(成功率 90%+) 1 用浏览器打开 https://store.rg-adguard.net 这是微软 CDN 解析站,安…

Python 中字典和 if-else 的选择

一、为什么要写这篇文章&#xff1f; 在 Python 编程中&#xff0c;我们经常需要根据不同的条件做不同的事情。比如&#xff1a; 根据用户等级显示不同的内容根据成绩给出不同的评价根据天气决定穿什么衣服 这时候&#xff0c;我们通常有两种选择&#xff1a; 用 if-else 语句用…

【开源解析】基于HTML5的智能会议室预约系统开发全攻略:从零构建企业级管理平台

&#x1f680; 【开源解析】基于HTML5的智能会议室预约系统开发全攻略&#xff1a;从零构建企业级管理平台 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f4a1; 热爱不止于代码&#xff0c;热情源自每一个灵感闪现的夜晚。愿以开源之火&#xff0c;点亮前行…

中央广播电视总台联合阿里云研究院权威发布《中国人工智能应用发展报告(2025)》:我国依旧需要大力注重人工智能人才的培养

你好&#xff0c;我是杰哥。 中央广播电视总台联合阿里云研究院权威发布《中国人工智能应用发展报告&#xff08;2025&#xff09;》&#xff0c;以下为报告核心看点&#xff1a; 报告首提 “654”体系&#xff1a;揭秘 6大技术趋势、5 新应用场景、4 力产业模型&#xff1b;成…

Visual Studio 2010-.Net Framework 4.0-DevExpress安装

最新版的DevExpress已不支持.Net Framework 4.0&#xff0c;需要下载18.1及以下版本。 17.2.5版DevExpress下载&#xff1a; 百度网盘 请输入提取码

借助Aspose.HTML控件,在 Python 中将 HTML 转换为 Markdown

在这个人工智能时代&#xff0c;Markdown因其易用性而备受重视。这种标记语言易于人类和机器理解。此外&#xff0c;与 HTML 和 DOCX 相比&#xff0c;这种格式更有助于法学硕士 (LLM) 理解文档结构。因此&#xff0c;本指南将介绍如何以 Python 编程方式将HTML转换为 Markdown…

【2026版】Redis面试题

文章目录1. Redis为什么这么快&#xff1f;2. Redis的持久化机制是怎样的&#xff1f;3. Redis 的过期策略是怎么样的&#xff1f;4. Redis的内存淘汰策略是怎么样的&#xff1f;5. 什么是热Key问题&#xff0c;如何解决热key问题&#xff1f;6. 什么是大Key问题&#xff0c;如…

Python编程进阶知识之第四课处理数据(pandas)

目录 简介 1. 安装 Pandas 2.基本数据结构 1.Series &#xff08;1.&#xff09;创建Series &#xff08;2.&#xff09;Series的属性 &#xff08;3.&#xff09;Series 的索引和切片 2.DataFrame &#xff08;1.&#xff09;创建 DataFrame &#xff08;2.&#xff09;…

使用 Vue 实现移动端视频录制与自动截图功能

文章目录技术栈功能介绍video标签属性完整代码js 前端实现将视频Blob转Base64java 后端实现将视频Base64转mp4文件在移动端网页开发中&#xff0c;使用摄像头录制视频并自动生成截图是一个常见的需求&#xff0c;比如身份认证、人脸识别或互动问卷等场景。本文将介绍如何使用 V…

单片机是怎么控制步进电机的?

步进电机作为一种将电脉冲信号转化为角位移的执行机构&#xff0c;其运转依赖于脉冲信号的控制&#xff0c;而单片机作为控制核心&#xff0c;通过输出特定的脉冲信号和方向信号&#xff0c;实现对步进电机的步数、方向、转速的精准控制&#xff0c;整个过程需结合驱动电路、程…

数据库binlog日志查看方案

binlog可以查看当前数据库中所有的修改操作&#xff0c;包含数据和结构的修改&#xff0c;所以掌握数据库日志查看是有必要的 通过客户端连接到mysql 查看binlog日志的存储位置&#xff08;前提是已开启binlog&#xff09; -- 查看日志文件列表 SHOW BINARY LOGS;结果示例-- 这…

MinIO Go 客户端使用详解:对象存储开发实战指南

MinIO GO-SDK ✅ 一、准备工作 1. 环境依赖 2. 安装 SDK 🔧 二、初始化 MinIO 客户端 📦 三、创建 Bucket(存储桶) ⬆️ 四、上传对象 ⬇️ 五、下载对象 📂 六、列出对象列表 🗑️ 七、删除对象 🔚 八、总结 📌 推荐阅读: 随着云原生架构的发展,对象存储已成为…

linux-process

Linux进程概念 1. 进程概念 1.1 理解冯诺依曼体系解构 冯诺依曼体系解构五大核心&#xff1a; 运算器&#xff1a;负责算数运算&#xff08;加减乘除&#xff09;和逻辑运算&#xff08;与或非&#xff09;。 控制器&#xff1a;从内存中读取指令&#xff0c;并协调其他部件…

《西蒙学习法》核心思想的感悟与思考

以下是对《西蒙学习法》核心思想的感悟与思考&#xff0c;结合书中要点提炼为可实践的学习哲学&#xff1a;一、破除学习迷思&#xff1a;从“记忆量”到“认知升级”学习≠记忆 大脑不是硬盘&#xff0c;知识存储无限但时间有限。真正的学习是建立“解决问题的程序”&#xff…

互联网隐私的未来:Web3、区块链与神秘法宝

随着互联网技术的飞速发展&#xff0c;用户隐私保护成为了一个全球性的话题。Web3和区块链技术的出现&#xff0c;为互联网隐私的未来提供了新的可能性。本文将探讨这些技术如何塑造隐私保护的新格局&#xff0c;并介绍一些神秘的法宝&#xff0c;它们在保护用户隐私方面发挥着…

Go进阶高并发(多线程)处理教程

Go进阶高并发处理教程 目录 Go并发编程基础Goroutine深入理解同步原语详解并发模式与最佳实践性能优化技巧实战案例 Go并发编程基础 什么是并发&#xff1f; 并发是指程序能够同时处理多个任务的能力。Go语言从设计之初就将并发作为核心特性&#xff0c;提供了简洁而强大的…

一种基于单片机控制的太阳能电池板系统设计

摘 要: 设计的太阳能电池板系统&#xff0c;以单片机单元为核心&#xff0c;集检测、光能跟踪、板面清洁、输出控制为一体&#xff0c;解决了传统太阳能板控制功能简单、效率低的技术问题&#xff0c;达到了自动监测输出电能、自动清洗板面、全方位跟踪光伏发电最大效率点的技术…

前端实现类浏览器的 Ctrl+F 全局搜索功能(Vue2 + mark.js,用于Electron 、QT等没有浏览器Ctrl+F全局搜索功能的壳子中)

&#x1f4bb; 在 Electron 中实现类浏览器的 CtrlF 全局搜索功能&#xff08;Vue2 mark.js&#xff09;本文介绍如何在 Electron 应用中构建一个像 Chrome 一样的 CtrlF 查找框&#xff0c;支持全局高亮、滚动定位、关键词计数与上下跳转。✨ 背景 在网页浏览器中&#xff0c…

详解力扣高频 SQL 50 题-1757.可回收且低脂的产品【入门】

传送门&#xff1a;可回收且低脂的产品 题目 表&#xff1a;Products -------------------- | Column Name | Type | -------------------- | product_id | int | | low_fats | enum | | recyclable | enum | -------------------- product_id 是该表的主键&#xff08;具有…