linux高性能网络编程读书笔记之socket数据读写
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,数据读写分为TCP数据读写,UDP数据读写,通用数据读写1.TCP数据读写定义:socket是连接用户空间和内核空间,TCP和UDP是内核第一层。解释:对于文件的read和write同样适用于sock
千家信息网最后更新 2025年12月03日linux高性能网络编程读书笔记之socket数据读写
数据读写分为TCP数据读写,UDP数据读写,通用数据读写
1.TCP数据读写
定义:socket是连接用户空间和内核空间,TCP和UDP是内核第一层。
解释:对于文件的read和write同样适用于socket
例子:对于TCP流数据的系统调用
1.1ssize_t recv(int sockfd,void buf,size_t len,int flags);
1.2ssize_t send(int sockfd,const void buf,size_t len,int flags);
参数解释:
1.3buf和len是指缓存区的位置和大小
1.3.1flags通常为0
recv成功返回实际读取到的数据的长度
注:实际读取的长度可能小于期望len,所以要多次调用recv
recv可能返回0,意味着通信对方已经关闭了连接
recv出错返回-1并设置errno
1.4send基本上同上
发送的实例代码
int main(int argc, char *argv[]){ if(argc<=2){ printf("参数是错误"); } //一系列之前的连接 if(connect(sockfd,(struct sockaddr*) &server_address,sizeof(server_address))<0){ printf("连接失败"); }else{ const char* oob_data = "abc"; const char* normal_data = "123"; send(sockfd,normal_data,strlen(normal_data),0); sned(sockefd,oob_data,strlen(oob_data).MSG_OOB); send(sockfd,normal_data,strlen(normal_data),0); } close(sockfd); return 0; } //接收代码也是类似的 //连接成功 int connfd = accept(sock,(struct sockaddr *) &client,&client_addrlength); char buffer[BUF_SIZE]; memset(buffer,'\0',BUF_SIZE); ret = recv(connfd,buffer,BUF_SIZE-1,0); close(connfd); close(sock); return 0; ./testoobrecv 192.168.1.109 54321 ./testoobsend 192.168.1.109 54321 tcpdump -ntx -i eth0 port 54321 注:flags参数只对send和recv的当前调用生效,可以使用setsockket系统调用来永久性修改socket的某些属性
数据
参数
成功
代码
内核
实际
空间
系统
长度
解释
位置
例子
大小
实例
对方
属性
意味
文件
永久性
用户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
轻松筹 互联网大会科技
小学网络安全教育活动小结
网络安全公安工作职责
饥荒所有服务器模组用不了
沈阳雷克萨斯车机软件开发
缓存为什么比数据库快
艾滋病分子网络技术
生物信息学一级数据库定义
客户太多无法适应软件开发
网络安全攻防大赛方案
为了在服务器级别为
思科模拟器邮件服务器
云数据库软件
网络安全部门总结
网络技术的前沿科技
网络安全日是三月几号
珠海戴尔服务器租用
阿里云服务器华东
百将微聚互联网科技
数据库主文件组包含什么文件
服务器安全组未放行
数据库的基本函数
软件开发项目转包的谈判方案
网络安全月黑板报
数据库第二个字母为A
对办公楼开展网络安全改造
免费浏览器代理服务器
邮政寄递四大数据库是指什么
租香港服务器
图解服务器端网络