我目前正在完成一项大学任务,并且面临一个无法为我解决的问题。我正在开发一个连接到服务器并从那里获取消息的 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()
,您可能希望循环读取内容,直到它返回 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[] */
}
关于c - TCP 客户端 - 从未知/无限大小接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53124315/