C套接字:收到所有数据后退出客户端

时间:2015-06-07 21:47:45

标签: c sockets

我是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);

2 个答案:

答案 0 :(得分:1)

发件人可以在发送文件之前发送文件大小。接收器然后可以接收文件大小(比如4个字节),然后调用recv()直到收到完整的文件大小。

答案 1 :(得分:1)

您的服务器应在发送完整个文件内容后关闭套接字。这会导致您的recv函数返回并结束客户端的接收循环。

如果由于某种原因想要保持连接,则需要首先向客户端发送一些附加信息(例如文件长度) - 这样客户端就知道一个文件何时结束并且(可能)另一个文件开始。不过,我不确定你是否对此感兴趣。