【问题标题】:How can I be sure that a UDP message is received?如何确定收到了 UDP 消息?
【发布时间】:2015-02-20 08:17:43
【问题描述】:

假设我有一个 UDP 套接字并向服务器发送一条消息。现在如何判断服务器是否收到了消息?

来自服务器的编码确认是一个微不足道的选择,还有其他方法可以找到吗?我猜没有。。

【问题讨论】:

  • 在您的消息中包含一些校验和并让您的服务器发送响应。但是等等……不是又在写 TCP 了吗?
  • 显而易见的方法是让服务器发送确认。你能指出那不是一个选项吗?
  • 来自服务器的编码确认是一个微不足道的选择,还有其他方法可以找到吗?我猜没有..
  • 这就是 UDP 的重点:您无法确定数据报是否以正确的顺序到达,或者即使它们是否到达。切换到 TCP 吗?

标签: sockets udpclient


【解决方案1】:

您永远无法确定消息是否到达,即使 TCP 没有。这是通信网络的一般限制(例如,也适用于普通邮件)。如果您想了解更多信息,可以从Bizantine Generals Problem 开始。

可以做的事情是增加检测到消息丢失的可能性。通常这是通过向发件人发送确认来完成的。但这也可能会丢失,因此为了 100% 的可靠性,您需要发送确认确认。然后是对确认的确认的确认。以此类推。

我的建议:如果可靠性是您最关心的问题,请使用 TCP。它已经存在了一段时间,并且可能不会有定制解决方案可能存在的一些缺陷。如果您不需要 TCP 的可靠性,但需要低延迟或其他 UDP 擅长的东西,请使用 UDP。在这种情况下,最好确保某些数据包丢失不是问题。

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多