TCP 客户端 - 从未知/无限大小接收消息

TCP Client - Receive message from unknown / unlimited size

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

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

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

我的 C 知识真的很差,这就是为什么我需要一些建议、想法或技巧来解决我的问题。

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

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

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

使用 recv() 时,您可能希望循环读取内容,直到它 returns 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[] */
}