網絡編程相關函數

1. 套接字操作相關

1.1 socket

int socket(int domain, int type, int protocol);
參數說明
int domain協議族,常用 AF_INET(IPv4)、AF_INET6(IPv6)
int type套接字類型,SOCK_DGRAM(UDP)、SOCK_STREAM(TCP)、SOCK_RAW(原始套接字)
int protocol協議,常用 IPPROTO_IP,也可以指定具體協議 IPPROTO_UDP

返回值

  • 成功:返回套接字文件描述符(fd)

  • 失敗:返回 -1,同時設置 errno

說明:創建一個套接字,用于后續數據發送或接收。


1.2 bind

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
參數說明
int sockfdsocket 文件描述符
const struct sockaddr *addr指向地址結構體的指針,存儲 IP + 端口
socklen_t addrlen結構體長度,一般使用 sizeof(struct sockaddr_in)

返回值

  • 成功:返回 0

  • 失敗:返回 -1,同時設置 errno

說明:將本地 IP 和端口綁定到 socket 上,UDP 接收端必須 bind。


1.3 sendto

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
參數說明
int sockfdUDP 套接字文件描述符
const void *buf數據緩沖區地址
size_t len數據長度(字節數)
int flags一般為 0
const struct sockaddr *dest_addr目標接收端地址結構體
socklen_t addrlen目標地址結構體長度

返回值

  • 成功:返回實際發送字節數

  • 失敗:返回 -1,同時設置 errno

說明:向指定目標發送 UDP 數據包。


1.4 recvfrom

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
參數說明
int sockfdUDP 套接字文件描述符
void *buf數據接收緩沖區
size_t len緩沖區大小(最大接收字節數)
int flags一般為 0
struct sockaddr *src_addr存儲發送端 IP + 端口的結構體指針,可為 NULL
socklen_t *addrlen指向 socklen_t 變量,存儲結構體長度,可為 NULL

返回值

  • 成功:返回接收到的字節數

  • 失敗:返回 -1,同時設置 errno

說明:接收 UDP 數據,并可獲取發送端 IP 和端口。


2. IP / 端口轉換相關

2.1 htonl / htons

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
參數說明
hostlong / hostshort主機字節序的 IP 或端口號

返回值:大端字節序(網絡字節序)的值

說明:主機(小端)轉換為網絡(大端)字節序。


2.2 ntohl / ntohs

uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
參數說明
netlong / netshort網絡字節序的 IP 或端口號

返回值:主機字節序的值

說明:網絡(大端)轉換為主機(小端)字節序。


2.3 inet_pton

int inet_pton(int af, const char *src, void *dst);
參數說明
int af地址族 AF_INET / AF_INET6
const char *src點分十進制 IP 字符串
void *dst存儲網絡字節序的 IP 地址(4 字節 for IPv4)

返回值

  • 1:轉換成功

  • 0:字符串不合法

  • -1:地址族非法

說明:本地 IP 字符串 → 網絡字節序數值。


2.4 inet_ntop

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
參數說明
int af地址族 AF_INET / AF_INET6
const void *src網絡字節序的 IP 地址
char *dst存儲轉換后的 IP 字符串
socklen_t sizedst 緩沖區大小

返回值

  • 成功:返回 dst

  • 失敗:返回 NULL,同時設置 errno

說明:網絡字節序 → 本地字符串 IP。


3. 地址結構體

3.1 struct sockaddr_in

struct sockaddr_in {sa_family_t sin_family;   // AF_INETin_port_t   sin_port;     // 端口號,網絡字節序struct in_addr sin_addr;  // IPv4 地址char        sin_zero[8];  // 填充,保持與 struct sockaddr 大小一致
};

3.2 struct in_addr

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

說明

  • sockaddr_in 用于 IPv4 地址和端口

  • sin_port 必須使用網絡字節序

  • sin_addr.s_addr 也必須是網絡字節序

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

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

相關文章

ESLint 自定義 Processor(處理器)

ESLint 自定義 Processor(處理器) 🔹 什么是 Processor? 在 ESLint 中,Processor(處理器)是一種擴展機制,允許處理非標準 JavaScript/TypeScript 文件。默認情況下,ESLin…

C++語法 | static靜態|單例模式

這里寫目錄標題static 關鍵字靜態局部變量 vs 局部變量靜態全局變量 vs 全局變量靜態成員變量 vs 成員變量靜態成員函數單例模式static 關鍵字 在此之前, 先了解一下 static 關鍵字 靜態局部變量 vs 局部變量 在靜態局部變量中,變量不會在函數調用結束后銷毀&…

KEDA/HPA/VPA 三件套:ABP 后臺作業的事件驅動伸縮

🚀 KEDA/HPA/VPA 三件套:ABP 后臺作業的事件驅動伸縮 📚 目錄🚀 KEDA/HPA/VPA 三件套:ABP 后臺作業的事件驅動伸縮0. TL;DR ?1. 背景與目標 🎯2. 架構與協作機制 🧩2.1 系統總覽(組…

webRTc 為何深受直播實現的青睞?

WebRTC(Web Real-Time Communication)之所以在直播場景中備受青睞,核心原因在于它天然契合了現代直播對低延遲、實時互動、跨平臺兼容性的核心需求,同時大幅降低了實時音視頻開發的門檻。具體來說,其優勢體現在以下幾個方面: 1. 超低延遲,滿足實時互動需求 傳統直播協…

HarmonyOS迷宮游戲鴻蒙應用開發實戰:從零構建隨機迷宮游戲(初版)

在鴻蒙應用開發中,游戲類應用能很好地鍛煉 UI 布局、狀態管理與邏輯交互能力。本文將以一個隨機迷宮游戲為例,詳細拆解從首頁設計到迷宮生成、角色控制、通關判定的完整開發流程,帶你掌握 ArkUI 框架的核心應用技巧。一、項目整體架構本次開發…

石頭科技出海升級:全球電商業財一體化與OMS實踐

石頭科技作為智能清潔設備領域的獨角獸,2023 年海外收入占比超過 60%,產品銷往全球 60 多個國家。然而,智能硬件出海的復雜性,讓企業在業財管理上面臨前所未有的挑戰。智能硬件業財痛點 產品生命周期管理:研發、生產到…

《URP管線中后處理效果的創新應用與優化實踐》

硬件性能的飛速提升與玩家對畫面品質的高要求形成了相互推動的態勢,而渲染效果作為游戲視覺體驗的核心載體,直接決定了玩家對游戲的第一印象與沉浸感。后處理效果作為URP管線的“點睛之筆”,通過在渲染流程末尾對最終圖像進行二次加工,能夠模擬真實世界的光學現象(如光線散…

【Java 底層】JVM 垃圾回收機制深度剖析:從對象生死判定到收集器實戰

【Java 底層】JVM 垃圾回收機制深度剖析:從對象生死判定到收集器實戰 【Java 底層】JVM 垃圾回收機制深度剖析:從對象生死判定到收集器實戰 Java 之所以被稱為 “開發效率利器”,很大程度上得益于其自動內存管理機制 —— 開發者無需手動分配…

網絡問題排查

網絡連通性測試:ping ip持續性監測:ping -t ipnetstat 可以查看網絡連接狀態,可以看到顯示系統的網絡連接,路由表,接口等信息。netstat -nult 回車-t:顯示的是tcp的連接-u:顯示udp的連接-l:只顯示監聽狀態的端口-n:顯示…

tuple/dict/list 這三個數據類型在取值時候的區別

tuple(元組)、dict(字典)、list(列表)在取值時的區別。 1. list(列表) 👉 列表就是“一串有順序的東西”,像排隊的人。 取值方式:用 下標&#xf…

深度解析大模型服務性能評測:AI Ping平臺助力開發者精準選型MaaS服務

深度解析大模型服務性能評測:AI Ping平臺助力開發者精準選型MaaS服務 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵&#xff…

OpenCV物體跟蹤:從理論到實戰的全面解析

? 一、引言? 在計算機視覺的廣闊領域中,物體跟蹤技術宛如一顆璀璨的明星,散發著獨特的魅力與價值,發揮著舉足輕重的作用。它致力于在連續的圖像幀或視頻序列里,精準識別并持續定位特定的目標物體,這一過程看似簡單…

【Python】OS模塊操作目錄

1、概述os模塊是一個Python內置的操作目錄和查看系統基礎信息的模塊,可用于讓我們對目錄進行批量操作,其中包括:查看系統信息(環境變量、分隔符、換行符等),對目錄進行創建、刪除、重命名、查看目錄內容等&…

JavaScript中 i++ 與 ++i

在 JavaScript 編程中,i(前置自增)和i(后置自增)是兩個常用但極易混淆的運算符。它們看似都能實現變量自增 1 的功能,但其執行時機和返回值的差異,常常導致開發者在實際編碼中出現邏輯錯誤。本文…

fastapi 中間件的使用

1. 中間件基礎結構from starlette.middleware.base import BaseHTTPMiddlewareclass RequestLoggerMiddleware(BaseHTTPMiddleware):async def dispatch(self, request: Request, call_next):# 1. 請求處理前邏輯# 2. 調用后續處理response await call_next(request)# 3. 響應…

網絡白菜包子手動安裝 Arch Linux

大家好!我是大聰明-PLUS!針對初學者的 Arch Linux 安裝詳細教程。我曾經花了不少時間才搞清楚安裝過程。本文旨在提供一種“捷徑”,讓每個人都能輕松上手,無論他們是否有 Linux 使用經驗。Arch 的主要特點是極其靈活的系統配置&am…

Linux學習筆記(五)--Linux基礎開發工具使用

在Linux中軟件包通常是指一個包含了軟件程序、元數據、依賴關系信息和安裝腳本的壓縮文件??。因為在Linux上如果沒有軟件包管理器,那么想要下載軟件會非常麻煩,不僅需要自己去手動編譯和安裝,而且難以卸載和管理,所以軟件包的出現解決了這些問題.軟件包一般是由程序文件(編譯…

數據結構(陳越,何欽銘) 第十講 排序(下)

10.1 快速排序 10.1.1 算法概述10.1.2 選主元10.1.3 子集劃分10.1.4 算法實現10.2 表排序 10.2.1 算法概述10.2.2 物理排序10.3 基數排序 10.3.1 桶排序10.3.2 基數排序10.3.3 多關鍵字的排序10.4 排序算法的比較

vue 使用print.js 打印文本,HTML元素,圖片,PDF

vue 使用print.js 打印文本,HTML元素,圖片,PDF 安裝 npm install print-js --save示例 <template><div class"print-example"><h2>Print.js 打印示例</h2><!-- 打印區域 --><div id"printableArea" class"printable…

jenkins審批機器人功能概述-Telegram版

Jenkins審批機器人 - 功能概述 代碼鏈接&#xff0c;私聊可得 項目簡介 Jenkins審批機器人是一個集成Jenkins CI/CD流程的自動化審批系統&#xff0c;通過Telegram機器人提供便捷的發布審批功能。該系統支持多環境部署審批、用戶權限管理、構建結果通知等完整的DevOps審批流程。…