首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-17 
Socket大缓存接收小文件的问题我在linux下使用socket传输文件以下代码,在传输大文件时基本没有问题,但是当

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);

热点排行