TCP:套接字发送/接收顺序
我想知道您是否需要设置服务器和客户机套接字,以便它们始终运行TCP:套接字发送/接收顺序,c,sockets,C,Sockets,我想知道您是否需要设置服务器和客户机套接字,以便它们始终运行 send recv send recv ... 因为我遇到了一个问题,我发送了一条消息,然后最初的send()收到了两次 我发送消息upload foo.c 服务器显示:收到的消息:upload foo.c 但是,服务器会打印实际的文件内容,这些内容本应传递给另一个recv()socket调用(因为while循环中只有第一个socket打印了它的内容) 所以我感觉到它在下一次recv迭代中“溢出”了。我猜你在使用TCP?然后,您必须
send recv send recv ...
因为我遇到了一个问题,我发送了一条消息,然后最初的send()收到了两次
我发送消息upload foo.c
服务器显示:收到的消息:upload foo.c
但是,服务器会打印实际的文件内容,这些内容本应传递给另一个recv()
socket调用(因为while循环中只有第一个socket打印了它的内容)
所以我感觉到它在下一次recv迭代中“溢出”了。我猜你在使用TCP?然后,您必须记住,TCP是一种流协议,没有消息边界,没有任何开始或结束(建立和关闭的连接除外) 单个
recv
呼叫接收的内容可能少于或多于单个send
呼叫发送的内容
您需要提出一个更高级别的协议,该协议明确地包含消息边界,例如通过发送要接收的数据的长度。然后必须使用循环来接收正确的字节数。协议?TCP还是UDP?
Message received: This is some text from
the file foo.c
text hello ending