我是C新手学习套接字。我写了一个客户端服务器程序来接收文件并将其写入另一个文件。
程序本身工作正常 - 文件由服务器正确读取,客户端完全接收,但客户端在收到所有数据后不会退出。
客户端如何知道收到整个文件的时间以及如何退出?以下是我的客户端代码段。
注意:我添加了条件while (data > 0)
作为此尝试的一部分。如果错误请更正。
#define BUFFER 2048
char recived_data[BUFFER];
bzero(recived_data, BUFFER);
FILE *new_file = fopen(“Test.jpg”, “w”);
int data;
do {
data = recv(sockfd, recived_data, BUFFER, 0);
fwrite(recived_data, 1, sizeof(recived_data), new_file);
} while (data > 0);
答案 0 :(得分:1)
发件人可以在发送文件之前发送文件大小。接收器然后可以接收文件大小(比如4个字节),然后调用recv()直到收到完整的文件大小。
答案 1 :(得分:1)
您的服务器应在发送完整个文件内容后关闭套接字。这会导致您的recv
函数返回零并结束客户端的接收循环。
如果由于某种原因想要保持连接,则需要首先向客户端发送一些附加信息(例如文件长度) - 这样客户端就知道一个文件何时结束并且(可能)另一个文件开始。不过,我不确定你是否对此感兴趣。