Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TCP:套接字发送/接收顺序_C_Sockets - Fatal编程技术网

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