【问题标题】:How do you go about making a reliable udp protocol based upon tcp?您如何着手制作基于 tcp 的可靠 udp 协议?
【发布时间】:2012-05-31 03:23:16
【问题描述】:

我正在尝试编写一个可靠的 udp 协议,但是我对服务器何时将连接移交给套接字感到困惑。 在 java 中,tcp 服务器在特定端口上侦听,然后在接受时返回一个套接字。

Socket clientSocket = server.accept();

accept方法是在syn位交换后还是状态为Established时返回socket?

【问题讨论】:

  • @Seth Carnegie 我实际上正在使用 qt,但我正在研究 java 的做法。 Qt 类似,它使用套接字描述符。我很好奇 tcp 数据包交换中的什么时候它会返回一个套接字?

标签: c++ sockets tcp udp


【解决方案1】:

当accept方法返回socket时,socket处于连接状态,在accept方法返回socket之前交换SYN/SYN-ACK包。事实上,SYN 数据包并没有在接受方法中进行交换。这些数据包在驱动层(TCP 堆栈)上进行交换。

如果您正在尝试编写可靠的 UDP,那么我强烈建议您查看 UDT 项目源代码。它是用 C++ 编写的,但你可以从这个项目中获得很多指导。 UDT项目写得很好,效率很高,也很稳定。

http://udt.sourceforge.net/

【讨论】:

    【解决方案2】:

    Java 套接字是基于 BSD API 建模的,因此accept 返回的套接字应该是全连接的。

    【讨论】:

      【解决方案3】:

      首先回答问题-当accept返回时,套接字已连接。

      其次,执行此类操作的最佳方式是使用ØMQ,因为它非常棒,而且对您非常有用。

      最后取自这个article,它的工作原理是这样的:

      用户数据报协议 (UDP) 是 Internet 协议套件的核心成员之一,该套件是用于 Internet 的网络协议集。使用 UDP,计算机应用程序可以将消息(在这种情况下称为数据报)发送到 Internet 协议 (IP) 网络上的其他主机,而无需事先通信来建立特殊的传输通道或数据路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 2021-04-14
        • 2013-10-05
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        相关资源
        最近更新 更多