是否可以使用TCP或UDP中继UDP或TCP数据;即混合协议?

问题描述

UDP和TCP数据的标题不同。我有一个用例,我想在其中传输RTP媒体流。首选是UDP,然后是TCP。

现在想象一下,RTP数据包已接收到本地UDP端口。 此本地计算机首先尝试使用UDP与服务器建立连接。如果成功,则无需进一步查询。

但是,如果无法使用UDP,则我们建立TCP连接。 我可以中继 TCP上本地UDP端口的数据吗?假设,它最终将被馈送到对等UDP端口。我们的兴趣仅在于中继。

切换UDP端口和TCP连接,反之亦然。还有可能吗?

解决方法

当然,您可以创建一个显式中继应用程序,该应用程序接受UDP数据并在TCP连接中转发这些数据。然后,对等方中的另一个中继将从TCP连接中提取消息并将其作为UDP转发。这样,您基本上可以创建隧道。

或者您可以更改您的应用程序,以便它检测到UDP不起作用并直接使用TCP,而无需涉及任何中继。就开销和所需的基础结构而言,这可能是更好的方法。但是,这必须明确地编码到您的应用程序中,即,发送方和接收方都需要不同的套接字,并且根据协议,您可能需要附加的消息封装,因为TCP只是没有消息边界的字节流,而UDP具有对于RTP:对于通过TCP等协议使用的RTP消息,已经存在一种框架化标准,请参见RFC 4571

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...