QT 在Windows下实现ping功能(ICMP)

前言

很多时候,我们可能会图省事直接调用系统中的ping命令,但这是很不科学的~

废话不多说,直接上代码..

.pro文件

在.pro文件末尾添加一行:

LIBS += -liphlpapi -lws2_32

.h文件

在.h文件中加入:

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

private:
    int ping(const char *ip); #也可以加在public下,不是一定要private

.cpp文件: 

// ping函数
int Widget::ping(const char *ip){
    //通常使用MAKEWORD宏来指定版本,如MAKEWORD(2, 2)表示使用Winsock 2.2版本。
    WSADATA wsaData;

    //WSAStartup函数用于初始化Winsock库,并指定Winsock库的版本。这个函数需要在使用Winsock库的其他函数之前调用,而在程序结束时,你需要调用WSACleanup函数来释放Winsock库的资源。
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        qDebug()<<"Error1:"<

ping函数调用方法示例:

方法一:

ping("192.168.1.1");

方法二:

QString ip = "192.168.1.1";
ping(ip.toUtf8());

如果要重复执行,可以通过循环重复调用ping函数..

reply.Status状态码:

常量名

含义

IP_SUCCESS

0

状态是成功。

IP_BUF_TOO_SMALL

11001

答复缓冲区太小。

IP_DEST_NET_UNREACHABLE

11002

目标网络不可达。

IP_DEST_HOST_UNREACHABLE

11003

目标主机不可达。

IP_DEST_PROT_UNREACHABLE

11004

目的地的协议是遥不可及。

IP_DEST_PORT_UNREACHABLE

11005

目标端口不可达。

IP_NO_RESOURCES

11006

IP资源不足。

IP_BAD_OPTION

11007

指定了错误的IP选项。

IP_HW_ERROR

11008

一个硬件错误。

IP_PACKET_TOO_BIG

11009

包太大。

IP_REQ_TIMED_OUT

11010

请求超时。

IP_BAD_REQ

11011

一个坏的请求。

IP_BAD_ROUTE

11012

一个糟糕的路线。

IP_TTL_EXPIRED_TRANSIT

11013

在传输过程中的生存时间(TTL)的过期。

IP_TTL_EXPIRED_REASSEM

11014

在碎片重组过程中的生存时间过期。

IP_PARAM_PROBLEM

11015

一个参数的问题。

IP_SOURCE_QUENCH

11016

数据报到达太快,处理和数据报可能被丢弃。

IP_OPTION_TOO_BIG

11017

一个IP选项是太大了。

IP_BAD_DESTINATION

11018

一个坏的目的地。

IP_GENERAL_FAILURE

11050

一般故障。这个错误可以返回一些畸形的ICMP数据包

你可能感兴趣的:(QT,/,C++,Windows,网络,qt,windows,开发语言)