当前位置: 首页 > article >正文

计算机网络 之 【网络套接字编程】(固定宽度整数类型、socket常见API、netstat)

目录一.固定宽度整数类型C11引入二、socket 常见APIsocketbindIP地址绑定类型TCP 编程模型流程图listenacceptconnectUDP编程模型流程图recvfrom 函数sendto 函数常用 flags 选项常用错误码三、netstatLinux/Unix 选项及常用组合选项一.固定宽度整数类型C11引入头文件cstdint类型宽度有符号取值范围格式化字符串典型用途uint16_t16位无符号0 ~ 65535%hu(C) /cout(C)端口号、网络数据包长度、Unicode字符int16_t16位有符号-32768 ~ 32767%hd(C) /cout(C)音频采样、传感器数据、小范围整数uint32_t32位无符号0 ~ 4294967295%u(C) /cout(C)IPv4地址、文件大小、时间戳int32_t32位有符号-2147483648 ~ 2147483647%d(C) /cout(C)普通整数计数器、RGB颜色值uint64_t64位无符号0 ~ 2^64-1%llu(C) /cout(C)大文件大小、高精度时间戳int64_t64位有符号-2^63 ~ 2^63-1%lld(C) /cout(C)时间戳、大数据处理uint8_t8位无符号0 ~ 255%hhu(C) /cout(C)字节流、二进制数据int8_t8位有符号-128 ~ 127%hhd(C) /cout(C)小整数、字符数据跨平台一致性在不同系统上大小固定避免int在不同平台长度不同的问题网络通信确保数据包结构的字节对齐和大小一致内存优化精确控制内存使用特别适合嵌入式系统和网络协议设计可读性强类型名称直接表明变量的大小和符号二、socket 常见APIsocket项目说明函数名socket头文件sys/socket.h原型int socket(int domain, int type, int protocol);参数1domain协议域/地址族如AF_INET(IPv4)、AF_INET6(IPv6)、AF_UNIX(本地)参数2type套接字类型如SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)、SOCK_RAW(原始)参数3protocol指定协议通常填0自动选择也可指定如IPPROTO_TCP、IPPROTO_UDP返回值成功返回文件描述符非负整数失败返回 -1设置 errno功能创建一个套接字返回文件描述符供后续操作使用适用TCP/UDP客户端 服务器Socket的第一个参数如AF_INET、AF_UNIX用于指定通信协议族它决定了套接字使用的网络协议类型IPv4/IPv6/本地IPC等、地址格式及底层传输方式是后续地址绑定、数据传输等操作的基础必须与后续操作匹配且直接影响通信效率和适用场景bind项目说明函数名bind头文件sys/socket.h原型int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);参数1sockfdsocket 函数返回的文件描述符参数2addr指向协议地址结构的指针如struct sockaddr_in参数3addrlen地址结构的大小返回值成功返回 0失败返回 -1设置 errno功能将套接字与本地 IP 地址和端口号绑定适用TCP/UDP服务器客户端通常不需要系统自动分配临时端口IP地址绑定类型绑定类型代码示例接收范围适用场景优点缺点网络可达性INADDR_ANYs_addr INADDR_ANY所有接口的所有IPv4地址通用服务器、多网卡服务器一个socket接收所有IP配置简单无法区分具体IP来源本机所有IP均可访问回环地址s_addr inet_addr(127.0.0.1)仅本机回环接口本地进程通信、调试、数据库本地连接安全只允许本机访问外部无法访问仅限本机公网IPs_addr inet_addr(1.2.3.4)仅该公网IP对外服务物理机对外提供服务配置较复杂公网可达客户端无需显式绑定端口操作系统会在首次调用sendto发送数据时自动从动态端口范围通常为49152-65535中随机选择一个未被占用的端口进行绑定这种机制保证了同一主机上多个客户端进程的端口唯一性避免了手动绑定可能导致的端口冲突和进程启动失败问题而服务器必须显式绑定固定知名端口以便客户端能够稳定访问如果端口被占用则服务启动失败因此服务器端需做好端口规划和管理TCP 编程模型流程图服务器端: 客户端: socket() ────────────────── socket() │ │ │ │ bind() (绑定端口) │ │ │ │ │ listen() (开始监听) │ │ │ │ │ accept() (阻塞等待) ←──────── connect() (发起连接) │ │ │ │ 新套接字 ←─ 三次握手 ──────────→ 连接建立 │ │ │ │ read()/write() ───── read()/write() (数据通信) │ │ │ │ close() close()listen项目说明函数名listen头文件sys/socket.h原型int listen(int sockfd, int backlog);参数1sockfd已绑定的套接字文件描述符参数2backlog未完成连接队列的最大长度等待 accept 的连接数返回值成功返回 0失败返回 -1设置 errno功能将套接字由主动态转变为被动态开始监听客户端连接请求适用TCP服务器accept项目说明函数名accept头文件sys/socket.h原型int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);参数1sockfd监听套接字listen 后的套接字参数2addr指向协议地址结构的指针用于返回客户端的地址信息参数3addrlen地址结构的长度值-结果参数返回值成功返回新的已连接套接字文件描述符失败返回 -1功能从已完成连接队列中取出第一个连接返回一个新套接字用于与客户端通信适用TCP服务器connect项目说明函数名connect头文件sys/socket.h原型int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);参数1sockfdsocket 函数返回的套接字文件描述符参数2addr指向服务器地址结构的指针IP 端口参数3addrlen地址结构的大小返回值成功返回 0失败返回 -1功能客户端主动向服务器发起连接请求TCP 三次握手适用TCP客户端UDP编程模型流程图服务器端: 客户端: socket() ──────────────────── socket() │ │ │ │ bind() (绑定端口) │ │ │ │ │ │ │ │ │ recvfrom() (阻塞等待) ←─────── sendto() (发送数据) │ │ │ (收到数据获取客户端地址) │ │ │ sendto() (发送数据) ──────────→ recvfrom() (接收数据) │ │ │ │ │ │ │ │ close() close()recvfrom 函数项目说明函数名recvfrom头文件Linux/Unix:sys/socket.hWindows:winsock2.h原型ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)参数1sockfdsocket 文件描述符参数2buf接收数据缓冲区的指针参数3len缓冲区大小字节数参数4flags控制选项通常设为 0参数5src_addr输出参数存储发送方地址结构的指针参数6addrlen输入输出参数传入地址结构大小返回实际地址大小返回值成功返回接收到的字节数失败返回 -1设置 errno功能从无连接 socket如 UDP接收数据并获取发送方地址信息适用主要适用于 UDP也可用于 TCP但不常用sendto 函数项目说明函数名sendto头文件Linux/Unix:sys/socket.hWindows:winsock2.h原型ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)参数1sockfdsocket 文件描述符参数2buf待发送数据的缓冲区指针参数3len要发送的数据长度字节数参数4flags控制选项通常设为 0参数5dest_addr目标地址结构体指针参数6addrlen目标地址结构体大小返回值成功返回实际发送的字节数失败返回 -1设置 errno功能向指定地址的 socket 发送数据无需预先建立连接适用主要适用于 UDP也可用于 TCP但不常用常用 flags 选项flags适用函数说明MSG_DONTWAITrecvfrom, sendto, recv, send非阻塞操作MSG_WAITALLrecv, recvfrom等待直到缓冲区满MSG_PEEKrecv, recvfrom查看数据但不从队列移除MSG_OOBrecv, send, recvfrom, sendto发送/接收带外数据MSG_NOSIGNALsend, sendto不发送 SIGPIPE 信号MSG_CONFIRMsendto确认路径有效常用错误码errno适用函数说明EAGAIN/EWOULDBLOCKrecvfrom, sendto, recv, send非阻塞模式下无数据/缓冲区满EBADF所有函数无效的文件描述符ECONNREFUSEDsendto, connect远程主机拒绝连接EINTR所有阻塞函数系统调用被信号中断EINVAL所有函数参数无效EMSGSIZEsendto消息太大ENOTCONNrecv, send套接字未连接EADDRINUSEbind地址已被使用EACCESbind, connect权限不足三、netstat项目说明命令名netstat全称Network Statistics功能显示网络连接、路由表、接口统计等信息适用系统Linux/Unix、Windows、macOS命令格式netstat 选项Linux/Unix 选项及常用组合选项选项说明-a显示所有连接和监听端口-t仅显示 TCP 连接-u仅显示 UDP 连接-l仅显示监听状态的套接字-n以数字形式显示地址和端口不解析域名-p显示进程 PID 和名称-r显示路由表-i显示网络接口统计信息-s显示各协议统计信息-c持续输出每秒钟刷新-e显示扩展信息-o显示定时器信息组合选项命令说明使用场景-tulnnetstat -tuln查看所有监听端口最常用检查服务是否启动-tulnpsudo netstat -tulnp查看监听端口及对应进程查找端口占用-annetstat -an查看所有连接数字显示网络连接概览-antnetstat -ant查看所有 TCP 连接分析 TCP 连接状态-anunetstat -anu查看所有 UDP 连接分析 UDP 通信-rnnetstat -rn查看路由表路由问题排查

相关文章:

计算机网络 之 【网络套接字编程】(固定宽度整数类型、socket常见API、netstat)

目录 一.固定宽度整数类型(C11引入) 二、socket 常见API socket bind IP地址绑定类型 TCP 编程模型流程图 listen accept connect UDP编程模型流程图 recvfrom 函数 sendto 函数 常用 flags 选项 常用错误码 三、netstat Linux/Unix 选项…...

RK3576/RK3588 Yolo11 目标检测 Demo

前言 以前的大作业,根据rknn_model_zoo和easy eai示例代码修改(缝合),仅供参考 后来我试着模块化一些,方便看,但因为核心代码都是直接用的示例代码,所以有些模块还是耦合(composit…...

文件夹色彩标记系统:Folcolor效能倍增指南

文件夹色彩标记系统:Folcolor效能倍增指南 【免费下载链接】Folcolor Windows explorer folder coloring utility 项目地址: https://gitcode.com/gh_mirrors/fo/Folcolor 在信息爆炸的数字化时代,Windows用户每天面对成百上千个黄色文件夹&#…...

Pandoc:5步掌握全能文档转换的极简工作流

Pandoc:5步掌握全能文档转换的极简工作流 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 价值定位:为什么每个开发者都需要一款"格式翻译官" 当你需要将Markdown笔记转换为…...

PFC颗粒流代码模拟岩石预制裂隙与完整岩石单轴压缩对比分析

PFC颗粒流代码 pfc离散元岩石预制裂隙,裂隙岩石与完整岩石单轴压缩代码,可出各种裂隙形式,可分析应力应变曲线图,裂隙发育与数量,能量变化,简易声发射分析等做岩石单轴压缩离散元模拟的,谁没为…...

AI的“血管”:从大模型需求看6G、高速光纤与智算中心网络的技术变革

大模型训练与推理的爆发,正以前所未有的力度重塑通信网络基础设施。6G、高速光纤、智算中心网络,正成为AI基础设施的“血管”,承载着算力的血液,决定智能的极限。当GPT-5.4的推理能力逼近人类专家,当Sora可以生成一分钟…...

2026 年直播电商如何进化?内容创作与管理的新模式是什么?

核心要点 问题: 为什么很多直播电商团队在 2025 年后明显感到"内容越来越多,但效果越来越不稳定"? 答案: 进入 2026 年,直播电商从"单场爆发"转向"内容体系竞争"。真正拉开差距的&#…...

算法基础篇(11)Floyd算法

Floyd算法本质是动态规划,用来求任意两点之间的最短路,也称为插点法。通过不断在两点之间加入新的点来更新最短路。1、状态表示:f[k][i][j]表示:仅仅经过1~k这些点,结点i走到结点j的最短路径的长度。2、状态转移方程&a…...

SAP资产主数据批量修改避坑大全:GGB1替代+AR31工作清单配置详解(含日期字段特殊处理)

SAP资产主数据批量修改实战指南:从GGB1替代到AR31工作清单全流程解析 当财务团队需要对上千条资产记录进行成本中心迁移时,手工修改不仅效率低下,还容易产生数据不一致。SAP系统提供的GGB1替代规则与AR31工作清单组合方案,正是解决…...

别再ping IP了!手把手教你给ZeroTier虚拟网络里的设备起个‘好记’的名字(DNS/mDNS实战)

告别IP记忆困扰:ZeroTier网络中的智能命名方案实战指南 每次在ZeroTier虚拟网络中访问设备时,你是否也厌倦了反复查看和输入那串冗长的IP地址?想象一下,当你想连接家庭NAS时,只需输入nas.home就能立即访问&#xff0c…...

Spring Boot 3.2项目实战:5分钟搞定Tomcat虚拟线程配置,让你的接口吞吐量翻倍

Spring Boot 3.2虚拟线程实战:Tomcat配置优化与性能飞跃指南 当你的电商大促接口突然面临每秒上万请求,或者文件上传服务在高并发下响应缓慢时,传统线程池往往成为性能瓶颈。Spring Boot 3.2与Java 21的虚拟线程组合,正在重新定义…...

UG模型转STP后总出问题?可能是STEP 203和214版本没选对

UG模型转STP格式的深度选择指南:STEP 203与214版本差异解析 在工业设计领域,UG NX与STP格式的转换堪称日常操作,但许多工程师都曾遭遇这样的困境:明明转换过程一切顺利,接收方打开文件时却出现面片丢失、PMI信息异常甚…...

光储充系统实战笔记:当光伏遇到充电桩的硬核玩法

光储充交直流三相并网/离网系统 基于Matlab三相光伏储能充电桩(光储充一体化) 关键词:光伏大功率 储能 充电桩 LLC 电池 并网PQ控制 SPWM 恒压/恒流充电 提供两个仿真可对比看效果,如图一,二。 点击“加好友”可先看…...

AutoGen多智能体框架:从协作价值到企业级实践指南

AutoGen多智能体框架:从协作价值到企业级实践指南 【免费下载链接】autogen 启用下一代大型语言模型应用 项目地址: https://gitcode.com/GitHub_Trending/au/autogen 在人工智能快速发展的今天,如何让AI系统像人类团队一样高效协作完成复杂任务&…...

汽车电子测试人的 Prompt 工程

专栏:《AI 汽车电子测试实战》第 17 篇 作者:一线汽车电子测试工程师 适合人群:所有使用 AI 的测试工程师、想提升 AI 使用效率的测试人员开篇:为什么需要学 Prompt? 这是我上个月在某车企的 AI 培训项目中的真实经历。…...

信捷XD/XL系列PLC与C#通信实战:Modbus-RTU协议详解(附完整代码)

信捷XD/XL系列PLC与C#深度通信指南:从Modbus-RTU协议到工业级代码实现 在工业自动化领域,PLC与上位机的稳定通信是系统集成的核心环节。信捷XD/XL系列PLC凭借其出色的性价比和丰富的功能接口,已成为中小型自动化项目的热门选择。而C#作为.NET…...

Mplus实战:如何用随机截距交叉滞后模型(RI-CLPM)分析心理学纵向数据?

Mplus实战:随机截距交叉滞后模型(RI-CLPM)在心理学纵向研究中的深度应用 心理学研究中,我们常常需要探索变量间的动态相互作用——比如焦虑和睡眠问题如何相互影响?传统交叉滞后模型(CLPM)虽然广…...

OpenClaw环境隔离方案:ollama-QwQ-32B镜像与本地Python虚拟环境整合

OpenClaw环境隔离方案:ollama-QwQ-32B镜像与本地Python虚拟环境整合 1. 为什么需要环境隔离 上周我在尝试将OpenClaw接入本地部署的ollama-QwQ-32B模型时,遇到了一个棘手的问题:我的开发环境突然崩溃了。事后排查发现,是OpenCla…...

终极指南:如何使用LeetDown轻松降级A6/A7苹果设备系统

终极指南:如何使用LeetDown轻松降级A6/A7苹果设备系统 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown LeetDown是一款专为macOS设计的图形化降级工具,能够…...

5分钟快速上手:Rufus打造专业级USB启动盘的终极指南

5分钟快速上手:Rufus打造专业级USB启动盘的终极指南 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 还在为系统安装、数据恢复或系统维护而烦恼吗?Rufus(可靠U…...

Charticulator:突破传统桎梏的自定义数据可视化革新——从模板依赖到自由创作

Charticulator:突破传统桎梏的自定义数据可视化革新——从模板依赖到自由创作 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 数据可视化工具是否常常…...

uniapp定位踩坑记:腾讯地图误差1km?高德地图精准配置全攻略

Uniapp定位精度优化实战:从腾讯地图1km误差到高德厘米级精准配置 最近在开发一款外卖配送类应用时,我被定位精度问题折磨得够呛。原本以为接入腾讯地图SDK就能轻松搞定,结果实测发现定位偏差经常达到800米以上——这对于需要精确到楼栋的外卖…...

3步掌握PAGExporter:After Effects动画高效导出完整指南

3步掌握PAGExporter:After Effects动画高效导出完整指南 【免费下载链接】libpag The official rendering library for PAG (Portable Animated Graphics) files that renders After Effects animations natively across multiple platforms. 项目地址: https://g…...

Realtek RTL8125 2.5GbE网卡驱动技术指南

Realtek RTL8125 2.5GbE网卡驱动技术指南 【免费下载链接】realtek-r8125-dkms A DKMS package for easy use of Realtek r8125 driver, which supports 2.5 GbE. 项目地址: https://gitcode.com/gh_mirrors/re/realtek-r8125-dkms 1. 问题诊断:网络设备识别…...

光纤布拉格光栅(FBG)笔记【2】:传感机制与布拉格波长调谐分析

1. 光纤布拉格光栅的传感机制揭秘 第一次接触光纤布拉格光栅(FBG)传感时,我完全被它"以光测万物"的能力震撼了。这根比头发还细的光纤,竟然能精准感知温度、应变等物理量的变化。经过多次实验验证,我发现它的核心秘密就藏在布拉格波…...

OpenClaw 超级 AI 实战专栏【补充内容】AI开发实操:减少Token用量、提升模型效率的8个核心技巧(附代码)

目录 一、核心前提:理解Token消耗的关键场景 二、6种优化方案(附案例+代码) 方案1:精简Prompt(最易落地,立竿见影) 核心思路 应用案例 代码实现 方案2:上下文窗口裁剪(避免历史信息冗余) 核心思路 应用案例 代码实现 方案3:输入文本摘要压缩(批量处理场景…...

SLAM Toolbox应用宝典:从技术原理到实战落地的全面指南

SLAM Toolbox应用宝典:从技术原理到实战落地的全面指南 【免费下载链接】slam_toolbox Slam Toolbox for lifelong mapping and localization in potentially massive maps with ROS 项目地址: https://gitcode.com/gh_mirrors/sl/slam_toolbox SLAM Toolbox…...

OpenClaw云端体验方案:Qwen3.5-9B镜像免安装调试技巧

OpenClaw云端体验方案:Qwen3.5-9B镜像免安装调试技巧 1. 为什么选择云端沙盒方案? 上周我尝试在本地笔记本部署OpenClaw时,遭遇了Python版本冲突、CUDA驱动不兼容等一系列问题。作为一个经常需要快速验证技术方案的开发者,这种环…...

通义千问3-Reranker-0.6B优化升级:调整批处理大小和自定义指令,性能再提升5%

通义千问3-Reranker-0.6B优化升级:调整批处理大小和自定义指令,性能再提升5% 1. 为什么需要优化重排序模型性能? 在信息检索和问答系统中,重排序模型扮演着至关重要的角色。它负责对初步检索得到的文档进行二次排序,…...

从YAML到PyTorch模型:拆解Ultralytics YOLO V8/V11中`parse_model`函数的完整工作流

从YAML到PyTorch模型:拆解Ultralytics YOLO V8/V11中parse_model函数的完整工作流 在计算机视觉领域,YOLO系列模型因其卓越的实时检测性能而广受开发者青睐。Ultralytics团队推出的YOLO V8/V11版本不仅延续了这一优势,更通过精心设计的配置文…...