读书人

Socket大缓存接收小文件的有关问题

发布时间: 2012-03-17 19:06:28 作者: rapoo

Socket大缓存接收小文件的问题
我在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);    }


比如说接收一个只包含"CSDN"的文件
本地文件显示出来是CSDN\00\00\00\00\00\00\00\00\00\00\00\00\00\00。。。形式被这种乱码填充至1024Bytes

[解决办法]
写入时不能再是最大长度了吧,这样试试

fwrite(buf, sizeof(char), locallen, infp);

读书人网 >C语言

热点推荐