gpt4 book ai didi

c++ - 通过为每个对等方创建新套接字来执行 Ping

转载 作者:行者123 更新时间:2023-11-28 05:18:35 26 4
gpt4 key购买 nike

我使用 C++ 中的 Qt 套接字创建了一个小型跨平台应用程序(尽管这不是特定于 C++ 或 Qt 的问题)。

该应用程序有一个小的“ping”功能,它会尝试连接到对等点并请求一个小挑战(即发送一些自定义数据并回复一些自定义数据)以查看它是否存在。

我为每个对等点打开一个套接字,因此一旦 ping 开始,我们就会在 SYN_SENT 中有多个套接字。

这是实现具有质询的类似 ping 协议(protocol)的正确方法吗?我在浪费 socket 吗?有没有更好的方法我应该这样做?

最佳答案

我会说你的选择是:

  1. 实际 ping(使用 ICMP 回显数据包)。这具有较低的开销,但只会告诉您主机是否已启动。它要求您处理丢失的数据包、超时和重新传输。

  2. 基于 UDP 的协议(protocol)。这也有较低的内核开销,但您将再次负责设置超时、处理丢失的数据包和重新传输。它的好处是可以让你积极地确认你的程序是在对等点上运行的。无论您添加多少对等点,它都可以只用一个套接字端点来实现。 (如果所有对等点都在本地网络上,您也可以通过广播一次发送给多个对等点,或者使用多播[为此需要复杂的设置]。)

  3. TCP 套接字就像你现在做的那样。这更容易编写代码,非常可靠并且会自动提供超时(即如果对等方不响应,您的 connect 最终将失败)。它让您肯定地知道您的同伴在那里并正在运行您的程序。虽然这会有更多的内核开销,并且您将在每个对等系统的主机上使用一个套接字端点,但我不会将其称为重大问题,除非您认为您将拥有数千个对等点。

    <

因此,最后,您必须判断:如果将有数千台主机参与并且此 ping 将频繁发生,那么您最好编写一个 UDP 解决方案。如果 ping 很少见,或者您不希望有那么多对等方,我会选择 TCP 路由。 (而且我不认为这是“套接字的浪费”——这些优点是 TCP 如此常用的原因。)

关于c++ - 通过为每个对等方创建新套接字来执行 Ping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42029543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com