c++ - 在不使用 ping 命令的情况下验证远程机器的连接性

标签 c++

在c++/vc++/mfc中是否有任何方法可以验证远程机器是否在网络上。我不想使用 ping 命令。我尝试使用 WSAConnect 方法,但搜索远程机器是否不在网络上需要花费大量时间。在那种情况下,应用程序 windoe 会卡住很长时间。我需要替代方法来验证远程机器网络连接。请帮忙

最佳答案

您可以检查主机名是否存在以及 DNS 是否可以为其解析 IP 地址,但这不会告诉您它是否在线。为了确定它是否在线,您必须与主机交换数据。为此,主机必须监听端口,并且必须发送某种响应。

通常,主机的最低公分母是 ICMP 数据包 - 又名 ping。您可以用 C++ 编写自己的服务来发送这些 UDP 数据包,并检测回复。

一些主机和一些路由器禁用 ICMP 以显示“不可见”。如果您知道您的主机接受 TCP 端口上的连接,您可以尝试创建一个 tcp 套接字。例如,您可以在 shell 中使用 nc 进行测试

nc -z google.com 80
Connection to google.com 80 port [tcp/http] succeeded!

如果您进行原始套接字编程,您可以尝试通过连接到主机,然后在短时间内调用 select()。

关于c++ - 在不使用 ping 命令的情况下验证远程机器的连接性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1036845/

相关文章:

c++ - VC++删除字符数组

c++ - 为什么创建本地类型 vector 失败

C++ 不能创建抽象类的实例

c++ - 对于由计算的 double 值组成的键,在 map 或 unordered_map 之间进行选择。

c++ - decltype(auto) 是否使尾随返回类型过时?

c++ - 系统::字符串转ASCII码

c++ - google test/mock vs boost vs catch 对 c++14/c++17 的支持

c++ - Crypto++ 是否支持 TOFB-I?

c++ - 从数组中提取对号

c++ - 为什么我得到 "error: ‘pthread_delay_np’ was not declared in this scope”?