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



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

------解决方案--------------------
写入时不能再是最大长度了吧,这样试试

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