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审批流程。…