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[] */
}
我目前正在完成一项大学任务,并且面临一个无法为我解决的问题。我正在开发一个连接到服务器并从那里获取消息的 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[] */
}