【Linux 网络开发】socket 编程发送和接收缓存大小匹配问题
1.【Linux 网络编程】为什么 IP 地址通常以192.168开头?——私有 IP 地址段2.【Linux 网络开发】Linux htons()、htonl()、pton()简介(常用在 socket编程中)
3.【Linux 网络开发】socket 编程发送和接收缓存大小匹配问题
4.【Linux 网络开发】 黑马Linux网络编程学到的东西socket 编程中有发送、接收缓存的情况:
例如服务器向客户端发送:
105 char server_buf[BUF_SIZE] = {0};
123 if(strncmp(server_buf, "exit", 4) != 0)
124 {
125 printf("Server got:%s\n", server_buf);
126 //将得到的字符串传给所有连接的客户端
127 for(i=0; i<cnt; i++)
128 {
129 //write(cnt_fd[i], server_buf, sizeof(server_buf)); //测试错误,接收方BUF_SIZE为50时会接受11次
130 write(cnt_fd[i], server_buf, strlen(server_buf)); //测试正确可行
131 //send(cnt_fd[i], server_buf, strlen(server_buf), 0);//测试正确可行
132 }
133 }
客户端从服务器接收:
89 char server_buf[BUF_SIZE];
90 while(1)
91 {
92 ret = recv(skt_fd, server_buf, sizeof(server_buf), 0);//接收 BUF_SIZE 大小缓存的数据
93 if(ret < 0)
94 {
95 perror("recv/read failed!");
96 exit(-1);
97 }
98 else
99 {
100 printf("Client rcv:%s\n", server_buf);
101 }
102 }
如果发送、接收缓存大小不一致,可能出现多次接收的问题。
以一个例子表示:
发送缓存大小 | 接收缓存大小 | 结果 |
500 | 500 | 正常(接收1次) |
500 | 50 | 会接收10次,结果可能不太正常 |
50 | 500 | 正常(接收1次) |
也就是说,如果要确保发送&接收正常(一次发送一次接收),就要让接收缓存大小 >= 发送缓存大小。
合集:
Linux 网络开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具