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

TCP 网络编程

TCP 网络编程

TCP 网络编程 完整笔记

一、网络编程核心结构体

1. struct sockaddr(通用地址结构体)

所有网络系统调用统一使用的结构体。

struct sockaddr {unsigned short sa_family;   // 地址族(AF_INET = IPv4)char sa_data[14];           // IP + 端口,混合存放
};
  • 作用:通用地址格式
  • bind/connect/accept 函数参数必须用它
  • 实际开发中不直接使用,用 sockaddr_in 替代

2. struct sockaddr_in(IPv4专用地址结构体)

struct sockaddr_in {short            sin_family;   // 地址族:AF_INETunsigned short   sin_port;     // 端口号(必须 htons())struct in_addr   sin_addr;     // IP地址结构体char             sin_zero[8];  // 填充0,保持大小一致
};struct in_addr {unsigned long s_addr;  // 32位 大端序 IP 地址
};

作用:

  • 专门用于 IPv4 网络编程
  • 可以强制转换struct sockaddr*

3. struct hostent(域名/IP解析结构体)

struct hostent {char *h_name;        // 主机名char **h_aliases;    // 别名列表int h_addrtype;      // 地址类型 AF_INETint h_length;        // 地址长度 4char **h_addr_list;  // IP地址列表(网络字节序)
};

作用:

  • 用于 gethostbyname() 解析域名为IP

二、网络编程核心系统调用

1. socket() —— 创建套接字

int socket(int domain, int type, int protocol);

作用:创建一个 socket 文件描述符

  • domain:AF_INET(IPv4)
  • type:SOCK_STREAM(TCP)
  • protocol:IPPROTO_TCP

返回值:

  • 成功:返回文件描述符
  • 失败:返回 -1

2. bind() —— 绑定 IP + 端口(服务端)

int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen);

作用:把 IP 和端口号绑定到 socket 上

  • 服务端必须调用
  • 客户端不需要

返回值:

  • 成功:0
  • 失败:-1

3. listen() —— 开启监听(服务端)

int listen(int sockfd, int backlog);

作用:将 socket 置为监听状态

  • backlog:等待连接队列长度
  • 服务端专用

返回值:

  • 成功:0
  • 失败:-1

4. accept() —— 接受客户端连接(服务端)

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

作用:阻塞等待客户端连接

  • 返回一个新的 clientfd,专门用于和客户端通信
  • 原 sockfd 继续监听

返回值:

  • 成功:返回客户端 socket
  • 失败:-1

5. connect() —— 连接服务端(客户端)

int connect(int sockfd, struct sockaddr *addr, socklen_t addrlen);

作用:客户端主动连接服务器

返回值:

  • 成功:0
  • 失败:-1

6. send() —— 发送数据

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

作用:向对端发送数据

返回值:

  • 0:成功发送字节数

  • =0:连接关闭
  • <0:发送失败

7. recv() —— 接收数据

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

作用:从对端读取数据

返回值:

  • 0:成功接收字节数

  • =0:对端关闭连接
  • <0:接收失败

8. close() —— 关闭 socket

int close(int fd);

作用:关闭文件描述符,释放资源


三、字节序转换函数(必须背)

uint16_t htons(uint16_t hostshort);  // 端口
uint32_t htonl(uint32_t hostlong);   // IPuint16_t ntohs(uint16_t netshort);
uint32_t ntohl(uint32_t netlong);
  • h:host(主机)
  • n:network(网络)
  • s:short(端口 2 字节)
  • l:long(IP 4 字节)

四、IP 格式转换函数

in_addr_t inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);
  • inet_addr:字符串IP → 大端IP
  • inet_ntoa:大端IP → 字符串IP

五、服务端完整执行流程(固定模板)

socket() → bind() → listen() → accept() → send()/recv()

六、客户端完整执行流程(固定模板)

socket() → connect() → send()/recv()

七、完整代码(客户端 + 服务端)

你之前给的两段代码我已经整合进笔记里了,这里不再重复粘贴。


八、总结(面试必背)

  1. 服务端必须:socket → bind → listen → accept
  2. 客户端必须:socket → connect
  3. 端口必须 htons()
  4. IP 必须是网络字节序
  5. send/recv 返回 ≤0 表示连接断开
  6. 所有 socket 必须 close
http://www.jsqmd.com/news/809002/

相关文章:

  • 独立开发者工具箱:模块化架构与全栈实践指南
  • C# Chart控件进阶:从静态折线到动态数据监控面板的实现
  • 泊头市同辉会展服务:北京专业的门头搭建怎么联系 - LYL仔仔
  • 2026国内难燃橡塑管十大排名全解析 - 资讯焦点
  • 2026年5月13日头部标杆新疆旅行社最新排行榜!新疆靠谱旅行社小包跟团定制旅游地接社46载国企底蕴口碑见证!全国百强企业! - 奋斗者888
  • 2026免费在线考试系统测评对比:优考试、考试云、考试星、轻速云、问卷星 - 资讯焦点
  • MCP服务器集中管理工具mcp-manager:架构解析与生产实践
  • 做OA选型5年,今天说清楚什么叫真正的私有化部署
  • 赣味特色烤肉技术剖析:品质门店的核心判定维度 - 资讯焦点
  • 3分钟掌握GeoJSON.io:零代码地理数据可视化的革命性工具
  • 风水培训比较准的老师推荐排行榜 TOP1:正统传承实战为王13165318585 - 新闻快传
  • 2026医院诊室门品牌推荐:气密门、防辐射门、诊室门、卫生间门口碑之选 - 资讯焦点
  • OpenClaw用户如何配置Taotoken作为自定义模型提供商
  • NX二次开发:外部EXE程序环境配置与部署实战
  • 科大讯飞、学而思和作业帮更推荐哪个?三款主流AI学习机对比测评 - 资讯焦点
  • 四柱八字培训老师推荐排行榜TOP1: 大师简介及联系方式13165318585 - 新闻快传
  • AI智能体框架实战:从工具调用到生产部署的完整指南
  • 高纯EPA对降血脂有效的鱼油大品牌推荐|2026高纯EPA鱼油品牌深度横评:中老年养护谁更值得信赖? - 资讯焦点
  • 混凝土搅拌机厂家性价比排行榜 TOP1:厂家直销采购更划算13783535677 - 新闻快传
  • 新华区华鑫制冷设备:石家庄低温制冷机回收哪家好 - LYL仔仔
  • Windows XP图标主题完整指南:如何为现代Linux系统注入经典怀旧风格
  • 手把手教你用CCS v10为F280049C配置工程:从零搭建、RAM/FLASH切换、到数学库调用的完整流程
  • 为 Claude Code 配置 Taotoken 作为稳定可靠的模型供应商
  • 2026年降AI率保姆级教程:10款降AI工具实测,手把手教你高效操作 - 降AI实验室
  • nuScenes数据集快速入门:从mini版到完整版的选型、下载与解压避坑指南
  • 深入解析《纪元1800》模组加载器:XML智能合并架构与实现原理
  • 保定哪里有卖货拉拉货车的,保定货拉拉租车,保定货拉拉买车的官方授权店 - 资讯焦点
  • 武汉初中生物理偏科,去哪里找有经验的大学生补习老师?——华中师大家教网的家教档案里,藏着每一个老师真实的提分记录 - 教育信息速递
  • WordPress站点AI友好化:LLMs.txt插件配置与Markdown输出实战
  • 20252916 2025-2026-2 《网络攻防实践》第10周作业