通过套接字传输大文件

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

我从事套接字编程,我编写了一个代码(服务器:python,客户端:C / C ++),以通过套接字传输数据。小文件,它完美地工作。然后,我尝试使用更大的文件,它仅传输该文件的一部分。这是我的代码:

服务器

def recv_file_from_client(conn):
    f = open("torecv","wb")
    while(True):
        l = conn.recv(1024)
        if "Done" in l:
            break
        f.write(l)
    f.close()
    print "Done recv"

客户

BOOL SendFile(TCHAR* file) {
    FILE* filewrite = fopen("test.txt", "a");
    FILE* fp = _wfopen(file, L"rb");
    unsigned char buffer[1024] = { NULL };
    int readedChar;
    int total = 0;
    char log[128] = { NULL };
    while ((readedChar = fread(buffer, 1, 1024, fp)) > 0) {
        if (send(s, (const char*)buffer, sizeof(buffer), 0)) {
            total += readedChar;
            sprintf(log, "%d\n", total);
            fputs(log,filewrite);
        }
        memset(buffer, 0, 1024);
    }
    send(s, "Done", 1024, 0);
    fclose(fp);
    return TRUE;
}

“结果”

python c++ c sockets winapi
1个回答
1
投票

Done不超过4个字节的任意序列。如果已存在已传输的文件中,它将停止传输。对于二进制文件,常见的方法是先发送大小,然后发送文件,或者发送具有众所周知结构的块(例如,以块大小开头),并使用空块表示文件的结尾。

© www.soinside.com 2019 - 2024. All rights reserved.