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次) |
也就是说,如果要确保发送&接收正常(一次发送一次接收),就要让接收缓存大小 >= 发送缓存大小。
标签:缓存,socket,编程,server,发送,接收,buf,500 From: https://www.cnblogs.com/FBsharl/p/17732353.html