gpt4 book ai didi

c - TCP 客户端无法将字符串发送到服务器

转载 作者:可可西里 更新时间:2023-11-01 02:44:39 25 4
gpt4 key购买 nike

我正在编写 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com