c ++ / vc ++ / mfc中是否有任何方法,以便我可以验证远程计算机是否在网络上。我不想使用ping命令。我尝试使用WSAConnect方法,但是如果远程计算机不在网络上,则需要花费大量时间进行搜索。在那种情况下,应用windoe会长时间冻结。我需要替代方法来验证远程机器网络连接。 Plz帮助
答案 0 :(得分:4)
您可以检查主机名是否存在以及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()来连接到主机。
答案 1 :(得分:2)
如果您不想阻止您的应用,请使用主题。
答案 2 :(得分:1)
你可以使用tracert命令 例如:
tracert -w 1000 192.168.0.77
答案 3 :(得分:1)
如果唯一的问题是调用WSAConnect会锁定您的UI,您可以尝试以非阻塞模式调用它。
在调用WSAConnect之前,调用WSAEventSelect将套接字设置为非阻塞模式。然后,您可以调用WSAAsyncSelect或WSAEventSelect来检查连接的状态。
MSDN关于WSAConnect的页面对非阻塞模式here有一些评论。答案 4 :(得分:0)
您可以检查机器是否已连接到网络,但是没有尝试将数据传输到驻留在互联网上的站点,我认为没有办法检查该网络是否实际在线。例如,您的最终用户也可能连接到目前不在线的DSL路由器。
答案 5 :(得分:0)
你可以使用arping。
另外一些智能开关可以谈论附加主机。