linux高性能网络编程读书笔记之socket数据读写
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,数据读写分为TCP数据读写,UDP数据读写,通用数据读写1.TCP数据读写定义:socket是连接用户空间和内核空间,TCP和UDP是内核第一层。解释:对于文件的read和write同样适用于sock
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
科技赋能下的互联网金融
美国互联网保险保险科技
互联网最新的科技
嘟嘟瓜互联网科技
九亚互联网科技
狮子座互联网科技有限公司
有木互联网科技
新浪科技互联网
郑州华宇互联网科技
智腾互联网科技有限公司
国大互联网教育科技有限公司薪资
合肥互联网科技公司公章图片
广州智享互联网科技
西安左小互联网科技有限公司
安徽零酒互联网科技有限公司
杭州科技互联网公司有哪些
重庆科技产业互联网有哪些
互联网的黑科技实验室
互联网大会出现的黑科技
颐高云石互联网科技
科技股互联网
科技类的互联网平台
甘肃拓世互联网科技有限公司
青海省互联网新科技
富国互联网科技创新基金
互联网科技和法律行业
科技互联网的核心竞争力
沐思想互联网科技有限公司
互联网科技年终奖
广州三三互联网科技有限公司