c函数不适用于所有尝试发送的文件

问题描述 投票:0回答:1

我正在尝试构建一个FTP服务器客户端。我已经写了这个函数来发送文件,但它不适用于所有文件。虽然它适用于某些文件,例如jpg,当涉及到ppt或其他文件时,它会产生问题。我正在尝试每次在ubuntu 18.04上运行的文件时发送100个字节

以前我尝试过库函数来通过套接字发送文件。但这也没有帮助。

void sendfiledata(int sockfd, char * filename) {

    FILE * file;
    unsigned long fileLen;
    file = fopen(filename, "rb");

    //Get file length
    fseek(file, 0, SEEK_END);
    fileLen = ftell(file);
    fseek(file, 0, SEEK_SET);

    long int loop = fileLen / 100;
    long int remainfile = fileLen % 100;

    buffer = (char * ) malloc(fileLen);

    fread(buffer, fileLen, sizeof(char), file);
    fclose(file);

    send(sockfd, & fileLen, sizeof(int), 0);
    int i = 0;
    char chunk[100];
    for (int j = 0; j < loop; j++) {
        int k = 0;
        while (i < fileLen && k < 100) {
            chunk[k] = buffer[i];
            i++;
            k++;
        }
        send(sockfd, chunk, 100, 0);
    }
    if (remainfile > 0) {
        int k = 0;
        while (i < fileLen && k < remainfile) {
            chunk[k] = buffer[i];
            i++;
            k++;
        }
        send(sockfd, chunk, remainfile, 0);
    }
    memset(filename, '\0', sizeof(filename));
}

我希望文件从一台机器完全发送到另一台机器。但这里有些文件正在运行,但并非全部。

c file sockets ftp send
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.