TCP客户端-接收来自未知/无限制大小的消息

时间:2018-11-02 18:51:28

标签: c tcpclient c99

我目前正在上大学,面临着我无法解决的问题。我正在开发一个TCP客户端,该客户端连接到服务器并从那里获取消息。

客户端应该能够处理任何长度的字符串,并输出所有接收到的字符,直到服务器关闭连接为止。

我的客户端可以正常工作并且具有固定的字符串长度,我也可以从djxmmx.net端口17。但是,我不知道如何映射此任意长度。

我的C语言知识真的很差,这就是为什么我需要一些有关实施问题的建议,想法或技巧。

实际上这是我用于接收消息的代码:

// receive data from the server
    char server_response[512];
    recv(client_socket, &server_response, sizeof(server_response), 0);

1 个答案:

答案 0 :(得分:1)

如果要使用基本上无限制的长度的输入,则需要循环调用recv()几次,以获取输入的每个后续部分。如果您可以一次处理每个部分,然后将其丢弃并移至下一部分,则这是一种方法。如果您需要一次性处理所有输入,则必须找到一种存储任意大量数据的方法,可能使用动态内存分配。

使用recv(),您可能要循环读取内容,直到它返回0,表明套接字已执行有序关闭(documentation here)。可能看起来像这样:

char server_response[512];
ssize_t bytes_read;
while ((bytes_read = recv(client_socket, &server_response,
                          sizeof(server_response), 0)) > 0) {
  /* do something with the data of length bytes_read
     in server_response[] */
}