我正在编写 TCP 服务器客户端。我使用单独的 send
系统调用分别发送三个字符串。
但是接收端我只得到一个字符串,它是我发送的第一个字符串。剩下的两个字符串未命中。
下面我给出了我的服务器客户端程序的一部分。
客户端.c
char *info = "infolog";
char *size = "filesize";
char *end = "fileend";
send(client, info, strlen(info)+1, 0);
send(client, size, strlen(size)+1, 0);
send(client, end, strlen(end)+1, 0);
服务器.c
while ((read_size = recv(client, msg, sizeof(msg), 0))) {
printf("Data: %s\n", msg);
memset(msg, 0, sizeof(msg));
}
实际输出:
Data: infolog
预期输出
Data: infolog
Data: filesize
Data: fileend
谢谢。
最佳答案
尝试打印出 read_size
。您可能已经收到了所有消息。
由于Nagle's Algorithm ,发件人可能将您的三个 send()
调用分批处理并向服务器发送了一个数据包。虽然您可以禁用 Nagle 算法,但我认为在这种情况下这不是一个好主意。您的服务器需要能够处理部分数据的接收,并处理接收比预期更多的数据。
您可能想研究为您的消息使用上层协议(protocol),例如 Google Protocol Buffers .看看 techniques页面,在那里他们描述了他们如何做:建立一个 Protocol Buffer ,并在写入缓冲区本身之前将其长度写入流。这样接收方就可以读取长度,然后确定在获得完整消息之前需要读取多少字节。
关于c - TCP 客户端无法将字符串发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21720088/