我正在使用TCP创建一个稳定的连接来配置(复制)一个数据生成器。生成的数据是真实的时间,如果丢失了,就没有必要保留它。而且,有很多数据。所以我只是想在UDP上传输它。我正在使用C套接字。
根据我的经验:UDP客户端首先需要向UDP服务器发送一些东西,这样服务器就知道它使用的是哪个端口。2这也确保了防火墙将接受并将此端口上的传入数据转发给UDP客户端。
这立即意味着你需要实现某种形式的双向通信,并进行错误检查和重试,以确保它能像UDP那样工作。如果你不想无休止地向任何地方发送数据,那么还需要检查客户端是否仍然存在。如果我错了,请纠正我。我不需要所有这些,我只是想把数据发送给客户端,只要它在那里。
大多数这些东西已经在TCP中可用:让服务器知道你有一个连接,如果连接关闭,服务器知道你离开了。
那么,是否有可能通过TCP启动UDP数据传输(以及如何做到这一点)?UDP客户端是否可以打开UDP端口,以便防火墙接受它并知道它是什么端口,以便它可以发送TCP命令:'请将您的数据发送到UDP端口XXXX'?当TCP连接关闭时,服务器可以假设UDP流也可以停止。
1条答案
按热度按时间hjzp0vay1#
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套接字绑定到该端口,也可以通过将UDP套接字绑定到端口0,让操作系统动态选择一个随机端口,然后使用
getsockname()
来找出操作系统选择的端口。当TCP连接关闭时,服务器可以假定UDP流也可以停止。
是的