Socket大缓存接收小文件的有关问题
Socket大缓存接收小文件的问题
我在linux下使用socket传输文件
以下代码,在传输大文件时基本没有问题,但是当文件长度小于buf大小时将接收到无意义字符
定义
服务器端:
客户端:
比如说接收一个只包含"****"的文件
本地文件显示出来是****\00\00\00\00\00\00\00\00\00\00\00\00\00\00。。。形式被这种乱码填充至1024Bytes
------解决方案--------------------
写入时不能再是最大长度了吧,这样试试
fwrite(buf, sizeof(char), locallen, infp);
我在linux下使用socket传输文件
以下代码,在传输大文件时基本没有问题,但是当文件长度小于buf大小时将接收到无意义字符
定义
- C/C++ code
#define MAX 1024; char buf[MAX];
服务器端:
- C/C++ code
memset(buf, 0x00, sizeof(buf)); while((fread(buf, sizeof(char), MAX, outfp)) != 0) { if((fileBytes = send(clientfd, buf, sizeof(buf), 0)) == -1) { perror("fail to send datas\n"); exit(1); } }
客户端:
- C/C++ code
memset(buf, 0x00, sizeof(buf)); locallen = 0; while((fileBytes = recv(sockfd, buf, sizeof(buf), 0)) && (locallen <= recvlen)) { //locallen是已接收到文件长度,recvlen是服务器端文件长度 if(fileBytes == -1) { perror("fail to receive datas\n"); exit(1); } locallen += fileBytes; printf("%ld\t", locallen); fwrite(buf, sizeof(char), MAX, infp); }
比如说接收一个只包含"****"的文件
本地文件显示出来是****\00\00\00\00\00\00\00\00\00\00\00\00\00\00。。。形式被这种乱码填充至1024Bytes
------解决方案--------------------
写入时不能再是最大长度了吧,这样试试
fwrite(buf, sizeof(char), locallen, infp);