为什么用socket的send和recv传数据,总会丢失一些数据

bob79 bob79 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用socket,从客户端读一个文件,传到服务端,总是有些数据丢失,为什么?
命令行:
./sever /home/data/socket/data/rec.dat
./client 10.1.22.xxx 2121 /home/data/socket/data/send.dat


客户端代码:./client 10.1.22.xxx 2121 /home/data/socket/data/rec.dat
sock = socket(AF_INET, SOCK_STREAM, 0);
if (connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0)
while( fgets( Buf,400,fp ) != NULL ) {
if (send(sock, Buf, sizeof(Buf),0) < 0){
perror("sending on stream socket");
return (-5);
}
i++;
}
printf("Client END:%ld",i) ;


服务端代码:
sock = socket(AF_INET, SOCK_STREAM, 0);
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(2121);
if( (SOCKET_ERROR = bind(sock,(struct sockaddr *)&server,sizeof(server) )) < 0)
while(1) {
msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (socklen_t *)&len);
if (msgsock == -1)
perror("accept");
else do{
memset(buf, 0, sizeof(buf));
if ((rval = recv(msgsock,buf,1024,0)) < 0)
perror("reading stream message");
if (rval == 0){
printf("ending connection \nServer END:%ld\n",k);
}
else {
fprintf(fp,"%s",buf);
k++;
}
}while (rval != 0);
close(msgsock);
}

从程序中printf结果看,客户端将一个文件的20000行全部读取并送出去:Client END:200000
服务端端也reve到了20000次:Server END:200000
但是,服务端的fprintf(fp,"%s",buf);中写文件就是比客户端读取的文件少了8行


...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
bob79
Linux/Unix社区 23,224 成员 74,535 内容