TCP:套接字发送/接收命令

时间:2018-08-25 13:21:43

标签: c sockets

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

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迭代中。

1 个答案:

答案 0 :(得分:0)

我猜您正在使用TCP?然后,您必须记住TCP是 streaming 协议,没有消息边界,也没有任何开始或结束(建立和关闭的连接除外)。

单个recv呼叫可能比单个send呼叫发送的收益少或更多。

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