Sockets 是否可以使用TCP或UDP中继UDP或TCP数据;i、 e.混合协议?

Sockets 是否可以使用TCP或UDP中继UDP或TCP数据;i、 e.混合协议?,sockets,tcp,udp,video-streaming,rtp,Sockets,Tcp,Udp,Video Streaming,Rtp,UDP和TCP数据的头是不同的。我有一个用例,我想在其中传输RTP媒体流。首先选择UDP,然后选择TCP 现在假设RTP数据包被接收到本地UDP端口。 此本地计算机首先尝试使用UDP与服务器连接。如果成功,则无需进一步查询 但是如果UDP不可能,那么我们就建立TCP连接我可以在TCP上中继本地UDP端口的数据吗?假设它最终将被馈送到对等UDP端口。我们的兴趣只是为了传达它 交换UDP端口和TCP连接,反之亦然。这也是可能的吗?当然,您可以创建一个显式中继应用程序,该应用程序接受UDP数据并在TC

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消息时,已经有了一个标准,请参见。

因此,简而言之,如果数据来自UDP端口上的“xyz”,我可以通过TCP将其作为“xyz”传输到服务器,然后其他UDP端点可以作为“xyz”接收它。对吗?@iammilind:对。但是,由于TCP是一个字节流,您必须以某种方式为“xyz”设置帧以进行传输,因为即使客户端通过TCP发送“xyz”,服务器也可能会接收“xy”和稍后的“z”。如果没有明确的帧,服务器就不知道这些应该在同一UDP消息中一起转发。@iammilind接收方和发送方必须使用相同的协议。无法使用TCP套接字连接到UDP套接字。但是没有什么能阻止您让一个程序接收UDP并传输TCP,另一个程序接收TCP并传输UDP,然后将这两个程序连接在一起。