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

C++网络编程(五)socket编程---从socket()到connect()

在网络编程中,套接字(Socket)是通信的基础。本文将详细介绍Linux系统下网络编程的核心API函数,包括创建、绑定、监听、连接和数据传输等关键操作。

1. socket() - 创建通信端点

socket()函数用于创建一个通信端点,返回文件描述符供后续操作使用。

#include <sys/socket.h>
#include <arpa/inet.h>int socket(int domain, int type, int protocol);

参数说明:​

  • domain:协议族

    • AF_INET:IPv4网络协议

    • AF_INET6:IPv6网络协议

  • type:通信类型

    • SOCK_STREAM:流式传输协议(TCP)

    • SOCK_DGRAM:数据报传输协议(UDP)

  • protocol:通常设为0,系统会根据前两个参数自动选择

    • 流式协议默认使用TCP

    • 报式协议默认使用UDP

返回值:​

  • 成功:返回文件描述符(非负整数)

  • 失败:返回-1

2. bind() - 绑定地址和端口

bind()函数将套接字与本地IP地址和端口号关联。

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

参数说明:​

  • sockfd:通过socket()创建的套接字描述符

  • addr:指向包含地址信息的结构体指针

  • addrlen:addr指向的结构体大小

地址结构体详解:​

struct sockaddr_in {sa_family_t sin_family;    // 地址族协议(AF_INET)in_port_t sin_port;        // 端口号(大端字节序)struct in_addr sin_addr;   // IP地址(大端字节序)unsigned char sin_zero[8]; // 填充字节
};

服务器端绑定技巧:​

使用INADDR_ANY(值为0,即0.0.0.0)可以绑定本机所有网络接口的IP地址,适用于多网卡环境。

3. listen() - 设置监听状态

listen()函数将套接字设置为监听状态,开始检测客户端连接请求。

int listen(int sockfd, int backlog);

参数说明:​

  • sockfd:已绑定的监听套接字

  • backlog:可同时检测的新连接个数最大值(内核限制为128)

返回值:​

  • 成功:返回0

  • 失败:返回-1

4. accept() - 接受客户端连接

accept()函数从已完成连接队列中接受一个连接请求。

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

参数说明:​

  • sockfd:处于监听状态的套接字

  • addr:用于存储客户端地址信息

  • addrlen:addr指向的内存大小

5. 数据接收函数

网络编程提供两种接收数据的函数,默认情况下都是阻塞的。

read()

ssize_t read(int sockfd, void *buf, size_t size);

recv()

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

参数说明:​

  • sockfd:通信文件描述符

    • 服务器端:accept()的返回值

    • 客户端:通过socket()创建并经connect()初始化的描述符

  • buf:存储接收数据的缓冲区

  • size:缓冲区容量

  • flags:通常设为0(使用默认属性)

返回值:​

  • >0:实际读取的字节数

  • =0:对方已断开连接

  • -1:读取异常

6. 数据发送函数

同样提供两种发送数据的函数。

write()

ssize_t write(int fd, const void *buf, size_t len);

send()

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

参数说明:​

  • fd:通信文件描述符

  • buf:要发送的数据

  • len:发送数据的实际长度(可使用strlen()获取字符串长度)

  • flags:通常设为0

注意:​​ 当写缓冲区满时,写操作会阻塞。

7. connect() - 客户端连接服务器

connect()函数用于客户端发起与服务器的连接。

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

参数说明:​

  • sockfd:通过socket()创建的通信文件描述符

  • addr:包含服务器IP和端口信息的结构体

  • addrlen:addr指向的内存大小

返回值:​

  • 成功:返回0

  • 失败:返回-1

总结

这些核心API构成了网络编程的基础,理解每个函数的作用和参数含义是编写稳定网络应用程序的关键。在实际开发中,还需要注意错误处理、非阻塞IO、多路复用等高级特性,以构建高性能的网络应用。

http://www.dtcms.com/a/453489.html

相关文章:

  • 23-25年总结:23年因为大模型而转型科技,24年起发力具身,25年长沙具身开始一轮轮突飞猛进
  • AI智能体(Agent)大模型入门【7】--构建传统的RAG应用
  • 淮阴区建设局网站网站备案变更公司名称
  • Bittensor 中国巡回 Meetup|上海站
  • S11e Network 商业模型:AI × Web3 × RWA 驱动的实体经济新范式
  • 人脸跟随 ( Channel 实现(缓存5条数据 + 2度过滤 + 平滑移动))
  • 线性表——数组描述
  • 帮客户做网站 没签合同咋办重视网站阵地建设
  • Raven2
  • 面试陷阱:SQL 子查询 vs JOIN 的性能差异
  • 做蛋糕视频的网站非法网站开发
  • 设备管理平台项目部署文档(含自动化脚本)
  • 毕业设计除了网站还可以做啥外贸网站关键词
  • 前端内存泄漏:从原理到实践的全方位解析
  • app手机网站建设黄消防网站模板
  • 成品网站建设咨询怀化最新消息今天
  • 第八章 FPGA 片内 FIFO 读写测试实验
  • 2025年--Lc170--H289. 生命游戏(矩阵)--Java版
  • FC和SFC的原版说明书(扫描的PDF)
  • 网站建设方案文库我们是设计师 网站建设专家
  • 做网站自己买服务器好还是用别人的柳州企业网站建设
  • 震荡市中MACD-KDJ组合的动态参数优化思路
  • 一文了解解耦 Prefilling 与 Decoding(PD 分离)以及典型的 PD 分离方案
  • petri网自学(四)
  • 海思Hi3516CV610/Hi3516CV608开发笔记之环境搭建和固件编译
  • 学生化残差(Studentized Residual):概念、计算与应用
  • 网站建设杭州做rap的网站
  • 华为交换机实战配置案例:从基础接入到核心网络
  • OpenCV(四):视频采集与保存
  • 证券业智能化投研与分布式交易系统架构:全球发展现状、技术创新与未来趋势研究