Linux網絡: socket初識

一些概念

簡單了解一下TCP,UDP這兩個協議,和一些概念

TCP與UDP

學校教過TCP是

  • 傳輸層協議
  • 有連接
  • 可靠傳輸
  • 面向字節流


而UDP是

  • 傳輸層協議
  • 無連接
  • 不可靠傳輸
  • 面向數據報

當時完全不知道這些什么意思

網絡字節序

網絡通信,要接收和發送數據。我們知道機器分為大端和小端存儲,那傳輸數據的時候就需要一個固定的標準,防止出錯。
于是有了:TCP/IP規定的網絡字節序,低地址高字節

1.發送主機通常將發送緩沖區中的數據按內存地址從低到高的順序發出;
接收主機把從網絡上接到的字節依次保存在接收緩沖區中,也是按內存地址從低到高的順序保存;
2.因此,網絡數據流的地址應這樣規定:先發出的數據是低地址,后發出的數據是高地址.
TCP/IP協議規定,網絡數據流應采用大端字節序,即低地址高字節. 不管這臺主機是大端機還是小端機,
都會按照這個TCP/IP規定的網絡字節序來發送/接收數據;
3.如果當前發送主機是小端, 就需要先將數據轉成大端; 否則就忽略, 直接發送即可;

在這里插入圖片描述

主機序列與網絡序列的相互轉換

在頭文件<arpa/inet.h> 給了4個接口

函數含義作用
htonshost to network short本地主機的 16 位整數轉為網絡序
htonlhost to network long本地主機的 32 位整數轉為網絡序
ntohsnetwork to host short網絡序的 16 位整數轉為主機序
ntohlnetwork to host long網絡序的 32 位整數轉為主機序

Socket編程

sockaddr

sockaddr是網絡通信的通用結構體

struct sockaddr {sa_family_t sa_family; // 地址族(協議族),如 AF_INETchar sa_data[14];      // 協議地址(具體內容依賴于地址族)
};

還有另外兩個結構體:

  1. sockaddr_in
struct sockaddr_in {sa_family_t sin_family;   // 地址族,必須是 AF_INETuint16_t sin_port;        // 端口號(網絡字節序)struct in_addr sin_addr;  // IP 地址char sin_zero[8];         // 填充字節,保持與 sockaddr 一致
};

特別提示: sin_addr
結構體in_addr封裝如下

struct in_addr {in_addr_t s_addr; // IPv4 地址,32 位,網絡字節序
};

所以賦值的時候:要對s_addr進行操作

addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 點分十進制轉網絡字節序

地址類型給AF_INET,表示網絡通信
2. sockadd_un

struct sockaddr_un {sa_family_t sun_family;     // 地址族,必須是 AF_UNIXchar sun_path[108];         // 本地文件路徑,作為套接字標識
};

地址類型給AF_UNIX,表示本地通信
在這里插入圖片描述

IP地址格式

IP地址有點分十進制(“127.0.0.1”)和十六進制4字節序列(0xC0A80101)

點分十進制是為了方便閱讀,但是,s_addr是4字節序列的格式,像下面這樣

addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 點分十進制轉網絡字節序

就需要調用函數來進行轉換

函數作用
inet_aton點分十進制 → 4 字節網絡序
inet_ntop4 字節網絡序 → 點分十進制
in_addr_t inet_addr(const char *cp);

網絡字節序再轉換一次?

轉換為4字節序列后,需要轉換成網絡字節序再存入sockaddr_in

好消息,好消息!
inet_addr先完成轉換到4字節序列,再轉換為網絡字節序

// 創建 socket 文件描述符 (TCP/UDP, 客戶端 + 服務器)
int socket(int domain, int type, int protocol);
// 綁定端口號 (TCP/UDP, 服務器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 開始監聽socket (TCP, 服務器)
int listen(int socket, int backlog);
// 接收請求 (TCP, 服務器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立連接 (TCP, 客戶端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

補充:內存置0另一種方法(bzero與memset)

memset很常用,這里補充一個新的接口

void bzero(void *s, size_t n);
//s:指向要清零的內存塊的起始地址。
//n:要清零的字節數。

舉個例子

struct sockaddr_in addr;
bzero(&addr, sizeof(addr));

他等價于

memset(&addr, 0, sizeof(addr));

當然:依然推薦用memset
因為bzero 在 POSIX 標準中已廢棄

小結

介紹了socket基本概念和socket初始化的操作

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90105.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90105.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90105.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI時代的彎道超車之第二十七章:AI技術的發展方向

在這個AI重塑世界的時代,你還在原地觀望嗎?是時候彎道超車,搶占先機了! 李尚龍傾力打造——《AI時代的彎道超車:用人工智能逆襲人生》專欄,帶你系統掌握AI知識,從入門到實戰,全方位提升認知與競爭力! 內容亮點: AI基礎 + 核心技術講解 職場賦能 + 創業路徑揭秘 打破…

RabbitMQ用法的6種核心模式全面解析

文章目錄**一、RabbitMQ核心架構解析**1. AMQP協議模型2. 消息流轉原理**二、六大核心用法詳解****1. 簡單隊列模式&#xff08;Hello World&#xff09;****2. 工作隊列模式&#xff08;Work Queues&#xff09;****3. 發布/訂閱模式&#xff08;Pub/Sub&#xff09;****4. 路…

深入協程調試:協程調試工具與實戰

本文系統梳理主流協程調試工具&#xff0c;結合完整代碼示例與實戰技巧&#xff0c;助你高效解決異步編程難題一、協程調試的核心挑戰 協程的非線性執行流是調試的最大挑戰&#xff1a; 傳統斷點調試難以追蹤協程切換堆棧信息不完整或丟失上下文并發競爭條件難以復現 #mermaid-…

Git 日常開發實戰命令大全

&#x1f9f0; Git 日常開發實戰命令大全 本文整理了 Git 在日常開發中高頻使用的命令集合&#xff0c;覆蓋從基礎操作到進階技巧的完整流程&#xff0c;方便留存查閱&#x1f440; &#xff0c;最后附上所有指令。其中內容包括&#xff1a; ? 本地倉庫管理&#xff1a;添加文…

力扣 hot100 Day37

25. K 個一組翻轉鏈表 給你鏈表的頭節點 head &#xff0c;每 k 個節點一組進行翻轉&#xff0c;請你返回修改后的鏈表。 k 是一個正整數&#xff0c;它的值小于或等于鏈表的長度。如果節點總數不是 k 的整數倍&#xff0c;那么請將最后剩余的節點保持原有順序。 你不能只是…

【力扣 中等 C】516. 最長回文子序列

目錄 題目 解法一 題目 待添加 解法一 int max(int a, int b) {return a > b ? a : b; }int longestPalindromeSubseq(char* s) {const int len strlen(s);int dp[len];for (int i len - 1; i > 0; i--) {dp[i] 1;int leftDown;if (i 1 < len) {leftDown dp…

DAY 54 Inception網絡及其思考

知識點回顧&#xff1a; 傳統計算機視覺發展史&#xff1a;LeNet-->AlexNet-->VGGNet-->nceptionNet-->ResNet 之所以說傳統&#xff0c;是因為現在主要是針對backbone-neck-head這樣的范式做文章 inception模塊和網絡特征融合方法階段性總結&#xff1a;逐元素相加…

1. 微服務架構演進:從單體到SpringCloud

想象一下,你剛剛花了一個下午在生產環境下部署一款單體應用,結果因為一個微小的配置變動,整個系統宕機,大量用戶投訴蜂擁而至。運維緊急回滾,開發又要加班定位問題……這并非孤立事件,而是單體架構在規模和復雜性增長后常見的“連鎖反應”。 一、單體架構:簡單之始,復雜…

Charles 中文版抓包工具詳解:加速 API 調試與網絡問題排查

隨著技術的不斷發展&#xff0c;開發者面臨的任務日益復雜&#xff0c;特別是在調試和優化API接口時。確保應用的網絡請求在各種環境下的穩定性和高效性是提高用戶體驗的關鍵。Charles抓包工具作為一款強大的網絡調試工具&#xff0c;能夠幫助開發者精確捕獲HTTP/HTTPS流量&…

巔峰對話:文心4.5 vs DeepSeek R1 vs 通義Qwen3.0 深度評測

國產大模型三強爭霸&#xff0c;誰主沉浮&#xff1f; 2025年是中國大模型開源爆發之年——百度文心4.5系列橫空出世&#xff0c;阿里通義Qwen3.0登頂開源榜首&#xff0c;而DeepSeek R1在編程領域悄然登頂。 三大技術路線齊頭并進&#xff0c;卻走出了截然不同的道路。 在這…

Linux運維安全新范式:基于TCPIP與SSH密鑰的無密碼認證實戰

文章目錄 前言1. Linux 生成SSH秘鑰對2. 修改SSH服務配置文件3. 客戶端秘鑰文件設置4. 本地SSH私鑰連接測試5. Linux安裝Cpolar工具6. 配置SSHTCP公網地址7. 遠程SSH私鑰連接測試8. 固定SSH公網地址9. 固定SSH地址測試 前言 在云原生架構全面滲透企業IT體系的當下&#xff0c;…

行階梯形矩陣和行最簡形矩陣的區別

目錄 0、主元 一、行階梯形矩陣&#xff08;REF&#xff09; 特點&#xff1a; 二、行最簡形矩陣&#xff08;RREF&#xff09; 特點&#xff1a; 0、主元 主元是&#xff1a;該行最左側的非零元素??&#xff08;即第一個不為零的元素&#xff09;。 一、行階梯形矩陣&…

力扣 3258 統計滿足 K 約束的子字符串數量 I 題解

此題不評價&#xff0c;有點意思&#xff0c;我在次以兩種語言python 和c&#xff0c;用兩種相反的思路寫&#xff0c;注意細節不同。 原題鏈接3258. 統計滿足 K 約束的子字符串數量 I - 力扣&#xff08;LeetCode&#xff09; 法一&#xff0c;c&#xff0c;先統計出不符合的…

創意Python愛心代碼

創意Python愛心代碼分享的技術文章大綱 引言 簡述Python在圖形繪制和創意編程中的優勢介紹愛心代碼在編程社區中的受歡迎程度本文涵蓋的創意愛心代碼示例及其技術亮點 基礎愛心繪制 使用數學公式和turtle庫繪制簡單愛心代碼示例&#xff1a; import turtle def draw_heart…

OSPF路由過濾

一、概述 OSPF對接收的路由的過濾適用于任意OSPF路由器&#xff0c;是通過對接收的路由設置過濾 策略&#xff0c;只允許通過過濾策略的路由被添加到本地設備的IP路由表中&#xff08;對進入OSPF路由表不進行過濾&#xff09;&#xff0c;這主要是為了減小本地設備的IP路由表規…

NPM組件 nodemantle002 等竊取主機敏感信息

【高危】NPM組件 nodemantle002 等竊取主機敏感信息 漏洞描述 當用戶安裝受影響版本的 nodemantle002 等NPM組件包時會竊取用戶的主機名、用戶名、工作目錄、IP地址等信息并發送到攻擊者可控的服務器地址。 MPS編號MPS-qrk7-ayms處置建議強烈建議修復發現時間2025-07-04投毒…

山東布谷科技RC物聯網絡遠程遙控車項目源碼開發:直播行業的新機遇

在當今數字化時代&#xff0c;直播行業發展得如火如荼&#xff0c;各類基于直播的創新項目不斷涌現。從 2024 年的彈幕游戲到 2025 年的RC遠控車項目&#xff0c;這些都是泛直播行業衍生出的極具潛力的流量項目玩法。其中&#xff0c;山東布谷鳥網絡科技有限公司推出的RC遠程遙…

2025年全國青少年信息素養大賽圖形化(Scratch)編程小學低年級組初賽樣題答案+解析

2025年全國青少年信息素養大賽圖形化&#xff08;Scratch&#xff09;編程初賽樣題答案解析 &#xff08;一&#xff09;分級/分組內容 本賽項晉級過程包括初賽&#xff08;在線預選賽&#xff09;、復賽&#xff08;地區選拔賽&#xff09;和決賽&#xff08;全國總決賽&…

SVG 繪圖專家智能體prompt集錦:Claude、deepseek版本(一)

文章目錄 0 SVG(可縮放矢量圖形)0.1 SVG提示詞通用模板0.2 小紅書風格模版0.3 技術路線圖0.4 甘特圖0.5 數據可視化0.6 原型圖 1 李繼剛Claude Prompt1.1 知識卡片1.2 將真心話轉化為周報1.3 三行情書1.4 將產品賣點轉換為用戶買點1.5 毒舌暖心師1.6 段子手1.7 輸出反轉笑話1.8…

CDN分發加速技術詳解

CDN核心原理與架構1. 基本工作原理邊緣節點緩存&#xff1a;將內容分發到離用戶最近的邊緣服務器DNS智能解析&#xff1a;引導用戶訪問最優節點內容預取與緩存&#xff1a;熱點內容提前部署到邊緣2. 典型CDN架構組成用戶請求 → 智能DNS → 邊緣節點(Edge Server)↑二級節點(Mi…