我目前正在上大学,面临着我无法解决的问题。我正在开发一个TCP客户端,该客户端连接到服务器并从那里获取消息。
客户端应该能够处理任何长度的字符串,并输出所有接收到的字符,直到服务器关闭连接为止。
我的客户端可以正常工作并且具有固定的字符串长度,我也可以从djxmmx.net端口17。但是,我不知道如何映射此任意长度。
我的C语言知识真的很差,这就是为什么我需要一些有关实施问题的建议,想法或技巧。
实际上这是我用于接收消息的代码:
// receive data from the server
char server_response[512];
recv(client_socket, &server_response, sizeof(server_response), 0);
答案 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[] */
}