从 TCP 连接(C 套接字)启动 UDP

问题描述 投票:0回答:1

我正在使用 TCP 创建稳定的连接来配置 (cli) 数据生成器。生成的数据是实时的,丢失也无需保留。而且,还有很多。所以我只想通过 UDP 流式传输它。我为此使用 C 套接字。

根据我的经验:UDP 客户端首先需要向 UDP 服务器发送一些内容,以便服务器知道它使用哪个端口。这也确保防火墙将接受此端口上的传入数据并将其转发到 UDP 客户端。

这立即意味着您需要实现某种形式的双向通信,并进行错误检查和重试以确保其正常工作,因为 UDP 不提供任何保证。如果您不想无休止地向任何地方发送数据,还需要检查客户端是否仍然存在。如果我的做法有误,请纠正我。我不需要所有这些,我只是希望数据只要存在就可以发送给客户端。

其中大部分功能在 TCP 中已经可用:让服务器知道您存在连接,并且如果连接关闭,服务器知道您已离开。

那么,是否可以通过 TCP 发起 UDP 数据传输(以及如何做到这一点)? UDP 客户端是否可以打开 UDP 端口,以便防火墙接受它并知道它是什么端口,以便它可以发送 TCP 命令,例如:“请在 UDP 端口 XXXX 上向我发送您的数据”?当 TCP 连接关闭时,服务器可以假设 UDP 流也可以停止。

c sockets tcp udp
1个回答
0
投票

UDP 客户端首先需要向 UDP 服务器发送一些内容,以便服务器知道它使用哪个端口。

该信息可以轻松地通过 TCP 连接传送。

这也确保防火墙将接受此端口上的传入数据并将其转发到 UDP 客户端。

这是真的。通常,除非客户端直接通知防火墙打开 UDP 端口,否则防火墙管理员应先打开一个端口,然后告诉客户端可以使用哪个端口。

如果您不想无休止地向任何地方发送数据,还需要检查客户端是否仍然存在。

您可以利用 TCP 连接来实现此目的。如果 TCP 连接保持活动状态,您可以假设 UDP 接收器也仍在运行。客户端可以通过TCP连接通知服务器何时停止发送UDP数据。如果 TCP 连接中断,服务器可以假设 UDP 接收器也消失了。只要客户端想要接收 UDP,就应该保持 TCP 连接打开。

是否可以通过 TCP 发起 UDP 数据传输(以及如何做到这一点)?

TCP 和 UDP 套接字彼此完全独立。但是没有什么可以阻止您创建 UDP 套接字,然后通过 TCP 连接传送其信息。

UDP 客户端能否打开 UDP 端口以便防火墙接受它

是的,尽管可能需要也可能不需要手动干预,具体取决于您的设置。

并知道它是什么端口,以便它可以发送 TCP 命令,例如:“请在 UDP 端口 XXXX 上向我发送您的数据”?

是的,要么提前知道 UDP 端口,要么将 UDP 套接字绑定到端口 0,然后使用

getsockname()
找出操作系统动态选择的端口。

当 TCP 连接关闭时,服务器可以假设 UDP 流也可以停止。

是的。

© www.soinside.com 2019 - 2024. All rights reserved.