自學嵌入式 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
英文地址,請注明出處:http://en.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;具有…