【问题标题】:C sockets: Exit client after all data is receivedC套接字:收到所有数据后退出客户端
【发布时间】:2015-06-07 21:47:44
【问题描述】:

我是一个学习sockets的C新手。我编写了一个客户端-服务器程序来接收一个文件并将其写入另一个文件。

程序本身工作正常-服务器正确读取文件并且客户端完整接收它,但是客户端在接收到所有数据后没有退出。

客户端如何知道何时收到整个文件以及如何使其退出?以下是我的客户 sn-p。

注意:我添加了条件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);

【问题讨论】:

  • 您可以在实际文件数据之前准备一个标题,它会告诉您数据部分有多大,例如struct file_t { size_t size; char* data };

标签: c sockets


【解决方案1】:

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

如果您出于某种原因想要保持连接,那么您需要先向客户端发送一些附加信息(例如文件长度)——以便客户端知道一个文件何时结束以及(可能)另一个文件何时开始。不过,我不确定你是否对此感兴趣。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-17
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多