【问题标题】:TCP: Socket send/recv order [closed]TCP:套接字发送/接收顺序 [关闭]
【发布时间】:2018-08-25 13:21:42
【问题描述】:

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

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

【问题讨论】:

  • 协议? TCP 还是 UDP?

标签: c sockets


【解决方案1】:

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

单个recv 调用接收的可能少于单个send 调用中发送的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2014-07-21
    • 2018-10-12
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多