【发布时间】:2014-03-10 07:34:17
【问题描述】:
我正在编写 TCP 服务器客户端。我使用单独的send 系统调用分别发送三个字符串。
但是接收端我只得到一个字符串,这是我发送的第一个字符串。剩下的两个字符串错过了。
下面我给出了我的服务器客户端程序的一部分。
client.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。您很可能同时收到了这三条消息。 -
@Mike 你是对的。我收到所有字符串的strlen。为什么服务器不单独接收?
-
请参阅下面的 Basile 回答。 TCP 是基于流的,因此您可能会收到比已经发送的更多或更少的输出,具体取决于网络条件、缓冲等。
-
“比已经发送的输出更多” - 大声笑。我的意思是在发送一个小的
send()后,输出比您预期的要多(尤其是当您知道它们立即被其他send()调用时)