【问题标题】:UDP ResponseUDP 响应
【发布时间】:2010-09-24 22:05:16
【问题描述】:

UDP 不发回任何确认,但它会发送任何响应吗?

我已经设置了客户端服务器 UDP 程序。如果我让客户端向不存在的服务器发送数据,那么客户端会收到任何响应吗?

我的假设是这样的;

客户端-->广播服务器地址(ARP) 服务器 --> 用它的mac地址(ARP)回复客户端 客户端向服务器发送数据(UDP)

在任何情况下,客户端都只会收到 ARP 响应。如果服务器存在与否,它不会得到任何 UDP 响应?

客户端正在使用 sendto 函数发送数据。我们可以在 sendto 调用后得到错误信息。

所以我的问题是当客户没有得到任何响应时如何获得这些信息。 错误码可以从 WSAGetLastError 中获取。

我尝试将数据发送到不存在的主机并且 sendto 调用成功。根据文档,它应该失败并返回值 SOCKET_ERROR。

有什么想法吗??

【问题讨论】:

  • 有点担心您正在使用 UDP 并提出这个问题。这可能意味着您应该使用 TCP。
  • 我想知道您的不存在的主机是否有一个虚构的 IP 地址与数据报的来源在同一子网中,或者它是否位于路由器外部。

标签: sockets udp sendto


【解决方案1】:

您永远不会收到错误,也不会收到未到达目的地的 UDP 数据包的通知。

【讨论】:

    【解决方案2】:

    UDP 协议是在 IP 之上实现的。您将 UDP 数据包发送到由 IP 地址而非 MAC 地址标识的主机。

    正如所指出的,UDP 本身不会发送回复,您必须自己添加代码才能做到这一点。然后您将不得不添加代码来等待回复,并在响应丢失时采取适当的措施(通常在计时器上重新发送,直到您确定另一端“已死”),等等。

    【讨论】:

      【解决方案3】:

      “UDP 是一种更简单的基于消息的无连接协议。在无连接协议中,没有努力建立专用的端到端连接。通信是通过一个方向传输信息来实现的>,从源到目的地,而不检查目的地是否仍然存在,或者它是否准备好接收信息。”

      【讨论】:

        【解决方案4】:

        如果您在订购或验证时需要可靠的 UDP,以便 TCP/IP 让您查看 RUDP 或 Reliable UDP。有时您确实需要验证,但 UDP 和 TCP 的混合可能会阻碍 TCP 可靠性,从而导致瓶颈。

        对于大多数大型 MMO 来说,UDP 和可靠性 UDP 是通信和可靠性的手段。 RUDP 所做的只是添加一小部分 TCP/IP 来验证和排序某些消息,但不是全部。

        一个常见的游戏开发网络库是 Raknet,它内置了这个库。

        RUDP http://www.javvin.com/protocolRUDP.html

        使用 Raknet 和 Python 的 RUDP 示例 http://pyraknet.slowchop.com/

        【讨论】:

          【解决方案5】:

          您向其发送数据包的机器可能会回复 ICMP UDP 端口不可达消息。

          【讨论】:

            【解决方案6】:

            sendto 调用没有失败。数据报已发送到目的地。

            数据报的接收者或到达它的某个路由器可能会返回错误响应(主机不可达、端口不可达、超过 TTL)。但是 sendto 呼叫将在您的系统收到它时成为历史。一些操作系统确实提供了一种发现这种情况的方法,通常是通过getsockopt 调用。但是,由于它取决于您无法控制的网络状况,因此无论如何您都不能依赖得到错误回复,因此通常最好忽略它。

            在 UDP 之上分层的合理协议使用回复。如果您没有收到回复,则说明另一端没有收到您的数据报,或者没有回复您。

            【讨论】:

              猜你喜欢
              • 2016-04-30
              • 2012-01-27
              • 2012-01-06
              • 1970-01-01
              • 2014-11-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多