我从事套接字编程,我编写了一个代码(服务器: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;
}
Done
不超过4个字节的任意序列。如果已存在已传输的文件中,它将停止传输。对于二进制文件,常见的方法是先发送大小,然后发送文件,或者发送具有众所周知结构的块(例如,以块大小开头),并使用空块表示文件的结尾。