首页 > 解决方案 > TCP:套接字发送/接收顺序

问题描述

我想知道您是否需要设置服务器和客户端套接字,以便它们始终运行

send recv send recv ...

因为我在发送消息时遇到问题,然后最初的 send() 会收到两次。

我发送消息upload foo.c

服务器显示:Message received: upload foo.c

但是随后服务器会打印实际的文件内容,这些内容应该已经传递给另一个recv()套接字调用(因为只有 while 循环中的第一个套接字才打印了它的内容)

Message received: This is some text from
the file foo.c
text hello ending

所以我觉得它“溢出”到了下一个 recv 迭代中。

标签: csockets

解决方案


我猜你使用TCP?然后你必须记住 TCP 是一个协议,没有消息边界,没有任何开始或结束(除了连接建立和关闭)。

单个recv呼叫可能会收到比单个呼叫中发送的更少更多的信息send

您需要提出一个更高级别的协议,该协议明确包含消息边界,例如通过发送要接收的数据的长度。然后你必须使用循环来接收正确数量的字节。


推荐阅读