新闻详情

新闻详情

首页 / 资讯中心 / 详情

第十一节 socket 网络编程

发布时间:2026/9/30 5:34:56来源:尧图网络
第十一节 socket 网络编程
1、socket概念socket是网络编程的核心入口socket套接字 IP 地址 端口号是网络通信的“端点”。可以把 IP 想成小区地址端口想成门牌号——两台电脑上的两个进程通过这对“地址门牌”找到彼此。它为什么存在进程那一讲提到过进程是资源分配的基本单位而网络通信本质上是两个进程之间的通信。socket 正是操作系统提供给进程的网络“插座”——插上即可通信无需关心底层的 TCP/IP 细节。2、套接字接口SocketAPI接口2.1、创建套接字内核中创建socket结构体变量int socket(int domain,int type,int protocol);socket()创建套接字成功返回套接字的文件描述符失败返回-1domain: 设置套接字的协议簇 AF_UNIX AF_INET AF_INET6type: 设置套接字的服务类型 SOCK_STREAM SOCK_DGRAMprotocol: 一般设置为 0/IPPROTO_TCP/IPPROTO_UDP表示使用默认协议2.2、为套接字绑定地址信息1设置发送数据时的远端地址信息当前设备网卡IP地址端口号端口号0~1024是预留端口需要管理员权限2告知操作系统网卡收到的哪些数据应该交给当前套接字进行处理int bind(int sockfd,struct sockaddr*addr,socklen_t len);addr:要绑定的地址信息struct sockaddr_un,struct sockaddr_in6Struct sockaddr_in{ushort sin_family,地址域类型填充AF_INETUshort sin_port,要绑定的端口号Struct in_addr{uint32 s_addr;}sin_addr;要绑定的IP地址}bind()将 sockfd 与一个 socket 地址绑定成功返回 0失败返回-1sockfd 是网络套接字描述符addr 是地址结构addrlen 是 socket 地址的长度2.3、连接服务器用于TCP协议客户端int connect(int sockfd,const struct sockaddr*addr,socklen _t addrlen);connect()客户端需要通过此系统调用来主动与服务器建立连接,成功返回 0失败返回-1sockfd 参数是由 socket()返回的一个 socket。serv_addr 是服务器监听的 socket 地址addrlen 则指定这个地址的长度addr:要连接的服务器地址信息2.4、开始监听用于TCP的服务端int listen(int sockfd,int backlog);listen()创建一个监听队列以存储待处理的客户连接成功返回 0失败返回-1sockfd 是被监听的 socket 套接字backlog 全连接等待队列的最大长度即已完成三次握手、但尚未被 accept() 取走的连接的最大排队数量。它影响的是服务器来不及处理连接请求时的排队上限而不是服务器能支持的客户端总数。2.5、获取就绪连接用于TCP协议的服务端作用获取与指定客户端进行通信的操作句柄描述符Int accept(int sockfd,struct sockaddr*peer_addr,socklen_t *len )accept()从 listen 监听队列中接收一个连接成功返回一个新的连接 socket 该 socket 唯一地标识了被接收的这个连接失败返回-1sockfd 是执行过 listen 系统调用的监听 socketpeer_addr 参数用来获取被接受连接的远端 socket 地址---获取对端地址信息len 指定该 socket 地址的长度既要设置要获取多长的地址并且还要返回实际的地址信息长度函数的参数有三种分类输入型参数输出型参数输入输出型参数。close()关闭一个连接实际上就是关闭该连接对应的 socket2.5、接收数据接收数据的接口是一个阻塞接口recv的时候没有数据则等待TCPssize_t recv(int sockfd, void *buff, size_t len, int flags);recv()读取 sockfd 上的数据buff 和 len 参数分别指定读缓冲区的位置和大小sockfd:对于客户端来说就是socket的返回值对于服务端来说是accept的返回值flag:MSG_DONTWAIT本次recv能拿到数据则直接返回没有数据则报错返回MSG_PEER:接收数据但是不从缓冲区删除数据返回值成功则返回实际读取到的数据长度出错则返回-1TCP通信连接断开返回0UDP的接收接口:ssize_t recvfrom(int sockfd,void *buff,size_t len ,int flag,struct sockaddr*peer_addr,socklen_t addrlen)peer_addr:输出参数返回对端的地址信息表示该数据是谁发过来的recvfrom()读取 sockfd 上的数据buff 和 len 参数分别指定读缓冲区的位置和大小peer_addr 记录发送端的 socket 地址addrlen 指定该地址的长度2.6、发送数据发送数据相关的接口也是阻塞接口发送过快数据将socket发送缓冲区塞满了就会阻塞ssize_t send(int sockfd,char *data,size_t len,int flag);(TCP)send()往 socket 上写入数据char和 len 参数分别指定写缓冲区的位置和数据长度flags 参数为数据收发提供了额外的控制ssize_t sendto(int sockfd,char *data,size_t len,int flag,struct sockaddr*toaddr,socklen_t addrlen);(UDP)sendto()往 socket 上写入数据data 和 len 参数分别指定写缓冲区的位置和数据长度addrlen 指定该地址的长度toaddr:描述数据要发送给谁 指定接收数据端的 socket 地址返回值实际发送的数据长度出错则返回-12.7、关闭套接字Int close(int fd);
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Cursor 接入蓝湖:用 MCP 打通设计稿到代码的高效还原链路 2026/10/1 3:59:40

Cursor 接入蓝湖:用 MCP 打通设计稿到代码的高效还原链路

事情是这样的:我们前端组和设计组之间的对话,很长一段时间都是“还原了吗?”“还原了。”“这里差 2px,再改一下。”“哦,那这里呢?”……直到有一天,我把 Cursor 接到了蓝湖上,设计…

阅读更多 →
qData v1.1.1发布:动态游标同步与SQL Server 2008全面支持 2026/10/1 3:59:33

qData v1.1.1发布:动态游标同步与SQL Server 2008全面支持

1. 版本速览:qData v1.1.1 到底带来了什么先说结论:qData 数据中台开源版 v1.1.1 这次的核心看点就两个,一个是动态游标同步技术正式上线,另一个是 SQL Server 2008 的全面支持。如果前几个版本你还在纠结"老库怎么接进来、增…

阅读更多 →
棉花叶病害检测数据集977张22类:VOC转YOLO训练与调参实战 2026/10/1 3:59:33

棉花叶病害检测数据集977张22类:VOC转YOLO训练与调参实战

简介:本资源为棉花叶子病害检测数据集,面向从事农业图像识别、作物病害分类与目标检测的算法工程师、研究生及竞赛选手,可用于训练和验证YOLO或VOC格式的检测模型,解决棉花叶片病害自动识别中样本不足的问题。压缩包共约2000个文件…

阅读更多 →
基于KeyarchOS使用pgtune一键优化PostgreSQL性能调优实践指南 2026/10/1 3:59:33

基于KeyarchOS使用pgtune一键优化PostgreSQL性能调优实践指南

1. 为什么PostgreSQL调优让人头大:从参数迷宫说起1.1 PostgreSQL默认配置和实际生产需求的差距接触过PostgreSQL的人都有感受:安装完PG,默认配置可以直接跑起来,但真要放到生产环境里扛业务,不调参数基本等于裸奔。默认…

阅读更多 →
王道操作系统考研复习:总目录+思维导图高效搭建指南 2026/10/1 3:59:33

王道操作系统考研复习:总目录+思维导图高效搭建指南

每年三四月份,总会有一批刚决定考研的学弟学妹拿着一张“王道操作系统学习笔记总目录思维导图”的资源来问我:这东西到底该怎么用?操作系统在408里是最容易“看明白”却又最容易“转头就忘”的科目,它不像数据结构那样有大量代码题…

阅读更多 →
Oracle 19c多租户新增PDB全流程:从建库到扩容的实操与避坑 2026/10/1 3:59:33

Oracle 19c多租户新增PDB全流程:从建库到扩容的实操与避坑

上周接到一个需求:新项目要一套独立数据库,数据隔离是硬性要求。我手头正好有一台跑在Linux上的Oracle 19c,CDB已经在线运行,里面还挂着两个正在用的PDB。这种场景下显然没必要再装一套完整实例——Oracle 19c多租户架构本身就是为…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉