使用 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)
我想用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)