使用 QTcpSocket 创建一个 ping 函数

Make a ping function with QTcpSocket

我想用Qt做一个ping函数(不喜欢QProcess执行系统的ping方式)。

这是演示代码,

void SimmplePing(const QString& sAddress, int port=80)
{
    QTcpSocket messenger;
    messenger.connectToHost(sAddress, port);
    if (!messenger.waitForConnected(3000))
    {
        qDebug() << messenger.error();
    }
    else
    {
        qDebug() << "OK";
    }
}
void test()
{
    SimmplePing("182.34.19.222", 80);
}

我用“192.168.0.1”(我的路由器 IP)测试,"www.baidu.com" 都可以。

但我测试它“182.34.19.222”失败并显示 QAbstractSocket::SocketTimeoutError 错误消息。

但是,在系统cmd中ping它可以正常工作。不知道为什么。

这里的主要区别在于,通常使用的 ping 命令使用不使用 TCP 进行通信的 ICMP 协议。尝试使用 TCP 通过 websockets 连接到主机的处理方式不同。如果您尝试连接的主机的 TCP 套接字未在指定端口上侦听,在本例中为端口 80,您将不会收到应答,这可能会导致您遇到的行为。
(https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol)