我想使用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错误消息失败。
但是,在system中单击它可以正常工作。不知道为什么。

发布于 2020-05-29 09:19:08
这里的主要区别是ping命令通常使用的是ICMP协议,它不使用TCP进行通信。试图使用TCP通过websockets连接到主机的方式不同。如果要连接的主机的TCP套接字不监听指定端口(在本例中为端口80 ),则不会收到答复,这会导致您遇到的行为。
(https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol)
https://stackoverflow.com/questions/62082192
复制相似问题