VC++实现ping探测远程主机是否可达
电网调度运行人员考试:电网调度自动化运行值班员考试试题

电网调度运行人员考试:电网调度自动化运行值班员考试试题1、多选支路元件参数包括()A、线路电阻B、电抗C、对地导纳D、变压器变比正确答案:A, B, C, D2、单选《电网调度管理条例》规定我国调(江南博哥)度机构分为()级调度机构。
A.三B.四C.五正确答案:C3、单选各PMU应对主站心跳报文进行监视,在()秒内未收悉,PMU应主动断开管理管道。
A、10B、20C、30正确答案:A4、多选在保证密码安全中,我们应采取正确的措施有()A、不用生日做密码B、不要使用少于5位的密码C、不要使用纯数字D、不要将密码设得非常复杂正确答案:A, B, C5、单选一个Excel工作簿中系统默认含有 3个工作表,一个工作表中最多有()列,从A至IV。
A.16B.64C.128D.256正确答案:D6、单选子站设备运行维护人员,应熟悉现场紧急情况的处理方法,如遇危及人身安全、设备安全等紧急情况时,应()。
A.汇报调度后再处理B.通知专业技术人员来处理C.立即处理,事后必须汇报正确答案:C7、单选一般电器设备铭牌上的电压和电流的数值是()。
A.瞬时值B.最大值C.有效值D.平均值正确答案:C8、单选()是电能系统分析中最基本和最重要的计算,是各种电磁暂态和机电暂态分析的基础和出发点。
A.潮流计算B.状态估计C.短路电流计算D.安全分析正确答案:A9、单选UPS电源在下列条件下进行旁路切换,指出其中错误的说法是()。
A、150%负荷过载B、超过额定电压波动范围C、输入交流电源断电D、逆变器故障E、人工切换正确答案:C10、单选下列不属于网络安全的技术是:()A.防火墙B.加密狗C.认证D.防病毒正确答案:B11、单选电力调度自动化系统运行管理部门对有调度关系的发电企业、变电站自动化系统运行维护部门实行()归口管理。
A.行业B.专业技术C.行政正确答案:B12、单选()是指在调频过程中有功约束不满足要求时所做的潮流。
计算机网络实验PING命令的使用

计算机网络实验PING命令的使用PING命令是一个常用的网络工具,用于测试主机之间的连通性和测量网络延迟。
在计算机网络实验中,我们可以使用PING命令来检查网络中的主机是否可达,并评估网络的性能和稳定性。
下面将详细介绍PING 命令的使用。
一、PING命令的基本介绍1.PING的概念和作用PING(Packet InterNet Groper)是一个常用的网络工具,用于检测主机和主机之间是否可达,以及计算网络延迟。
PING命令发送一个探测封包到目标主机,并等待接收到目标主机发送的回应。
2.PING命令的原理PING命令利用了Internet控制报文协议(ICMP)来发送探测封包和接收回应。
当目标主机收到PING封包时,它会发送一个回应封包作为响应。
PING命令通过计算探测封包发送和接收之间的时间差来得到网络延迟。
3.PING命令的格式PING命令的基本格式如下:```ping [参数] 目标主机```其中,参数可以用来控制PING命令的行为,目标主机可以是主机名或IP地址。
二、PING命令的常用参数1.-t(持续发送PING请求)使用-t参数可以让PING命令持续发送PING请求,直到手动停止。
这对于测试网络的稳定性和延迟非常有用。
2.-n(指定要发送的PING请求数量)使用-n参数可以指定要发送的PING请求数量。
默认情况下,PING命令会发送4个请求。
通过增加或减少这个数量,可以更好地评估网络的性能。
3.-l(设置PING请求的数据包大小)使用-l参数可以设置PING请求的数据包大小。
默认情况下,PING命令会发送32字节的数据包。
通过修改数据包大小,可以测试网络的带宽和吞吐量。
4.-w(设置等待PING请求的超时时间)使用-w参数可以设置等待PING请求的超时时间。
默认情况下,PING 命令会等待4秒钟。
通过修改超时时间,可以评估网络的稳定性和响应速度。
三、PING命令的使用示例下面是一些使用PING命令的示例场景。
ping命令详解

ping命令详解ping命令是计算机网络中常用的命令之一,用于测试网络连接以及判断网络通信质量。
它通过发送数据包来测量从源主机到目标主机的往返时间,并可以检查数据包是否丢失或延迟。
本文将对ping命令进行详细介绍,包括其原理、用法以及常见问题的排查方法。
一、ping命令的原理在计算机网络中,ping命令利用ICMP(Internet Control Message Protocol,互联网控制消息协议)来发送网络数据包,然后等待目标主机的响应来判断网络的连通性和响应时间。
pong则是相应的包。
通过发送一个ICMP Echo Request包给目标主机,然后等待目标主机返回一个ICMP Echo Reply包,ping命令可以计算往返时间(Round-Trip Time,简称RTT)并统计丢包率。
这些信息可以帮助我们检测网络连接是否正常以及网络速度的快慢。
二、ping命令的用法在Windows系统下,我们可以使用命令提示符(Command Prompt)或者Windows PowerShell来执行ping命令。
在Linux和macOS系统下,则可以使用终端(Terminal)来操作。
下面是ping命令的基本用法:ping [选项] [目标主机]其中,目标主机可以是IP地址或者域名。
常见的选项包括:-c n:指定发送数据包的次数,n是一个正整数;-i n:指定发送数据包的时间间隔,n是一个浮点数,单位是秒;-w n:指定等待目标主机响应的超时时间,n是一个正整数,单位是毫秒;-s n:指定发送数据包的大小,n是一个正整数,单位是字节;-t:持续发送数据包,直到手动停止。
例如,执行ping命令ping 发送数据包并等待响应。
ping命令会显示每个数据包的往返时间以及丢包情况。
通过观察ping命令的输出,我们可以判断网络的连通性和响应速度。
三、常见问题的排查方法1. 目标主机不可达问题当我们执行ping命令时,如果显示“请求超时”或者“目标主机不可达”的错误信息,说明目标主机无法通过网络进行访问。
C网络连接判断(最新整理)

PingReply pr = p.Send("");这句代码 进行 try catch 一下 (因为,断开网络的时候会抛出异常);
暂停 10 分钟的那段代码要写在 catch 里,这里就不详细列出了。 你肯定知道 的。
方法1下面简程序就是可以直接去建立一控制台简用程序去简简一下不简需要简明一下程序的思路就是通简ping的方式去pinginternet上简算机的ip地址简里是ip123145681如果能ping成功代表本地简简简接上外123145681简个ip地址可以internet上的简算机的ip都可以不简如果程序的简ip比如qq163等服简器ip简简明白那个ip也可以简成如http
using System; using System.Collections.Generic; using System.Text; using workInformation; using System.Threading;
namespace ConsoleApplication1 {
13.
Console.ReadLine();
14.
}
15.
private static string CmdPing(string strIp)
16.
{
17.
Process p = new Process();
18.
p.StartInfo.FileName = "cmd.exe";
19.
eShellExecute = false;
43. }
总结,这里就是为了说明一个问题,不但是 Ping 命令,只要是命令行程序或者是 Dos 内部命令,我们都可以用上面的方式来执行它,并获取相应的结果,并且这些程序的执行 过程不会显示出来,如果需要调用外部程序就可以嵌入到其中使用了。
用C语言实现Ping程序功能

#define ICMP_ECHO 0 #define ICMP_ECHOREPLY
8
这两种 ICMP 类型报头格式如下:
在 Linux 中 ICMP 数据结构(<netinet/ip_icmp.h>)定义如下:
struct icmp { u_int8_t icmp_type; /* type of message, see below */ u_int8_t icmp_code; /* type sub code */ u_int16_t icmp_cksum; /* ones complement checksum of struct */ union
ICMP 报头格式 ICMP 报文分为两种,一是错误报告报文,二是查询报文。每个 ICMP 报头均包含类型、编码和校 验和这三项内容,长度为8位,8位和16位,其余选项则随 ICMP 的功能不同而不同。 Ping 命令只使用众多 ICMP 报文中的两种:"请求回送'(ICMP_ECHO)和"请求回应 '(ICMP_ECHOREPLY)。在 Linux 中定义如下:
用 C 语言实现 Ping 程序功能
摘自: IBM developerworks China
作者:梁俊辉 大部分人用 ping 命令只是作为查看另一个系统的网络连接是否正常的一种简单方法。 在这篇 文章中,作者将介绍如何用 C 语言编写一个模拟 ping 命令功能的程序。 ping 命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。 ping 命令的工作原 理是:向网络上的另一个主机系统发送 ICMP 报文,如果指定系统得到了报文,它将把报文一模一 样地传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。 例如,在 Linux 终端上执行 ping localhost 命令将会看到以下结果:
Visual-C--网络编程技术-09解析

ICMP报文 ❖ ICMP报文为两级封装,每个ICMP消息都封装
在IP封包中的数据部分,IP数据报则放在帧的数 据中进行网络传输
网络编程技术
ICMP包头
❖ ICMP包头包含三个字段:1字节类型域、1字节 代码域、2字节校验和。
8-bit ICMP 8-bit ICMP
类型
代码
16-bit ICMP校验和
网络编程技术
程序界面 ❖ 详细代码见教材
网络编程技术
网络编程技术
ping过程
1. 源主机向目的主机发送一个类型为8的回应请求 报文
2. 若目的站点收到回应请求报文则把报文IP包头 部中的目的IP与源IP地址交换,将类型8改为 回应类型0,计算出新的校验和再发往源主机。
3. 若源主机收到了该回应报文,则不但说明了目的 主机可达,而且说明目的主机与源主机之间的路 由器工作正常,源主机和目的主机的IP、 ICMP软件运行正常。
个ICMP端口不可达消息,因为在接收端没有进程等待这 个消息。
网络编程技术
实现方法
1. 开始运行后首先创建两个套接字,一个是用于接 收ICMP封包的原始套接字sRaw,另一个是用 于发送TTL不断增加的UDP封包的套接字 sSend。
2. 程序进入无限循环,在sSend套接字上发送 UDP封包,逐渐增加封包的TTL值,每次TTL 超时,一个ICMP消息就会被发送回来,在 sRaw套接字上等待这个消息,打印发送此消息 的路由器的信息。这样就获得了所有经过的路由 器信息。
❖ 路由器中都有一张路由表,表中保存了从本路由 器到某一主机的路由信息,路由器就是通过该路 由表进行网络寻径的。
❖ 两台主机之间并没有一条固定的路径(路由表并不 固定),该路径随着网络的变动而作相应的变动。
ping -v -i -s的解读 -回复

ping -v -i -s的解读-回复“ping v i s”的解读首先,我们先来了解一下ping命令的基本用法。
Ping是一种计算机网络工具,用于测试两个节点之间是否可以通过IP网络进行通信,并且计算通信的延迟时间。
在命令行中,我们可以使用ping命令来向目标节点发送网络控制消息协议(ICMP)回显请求,来测试网络连接的质量。
在这个题目中,“ping v i s”被视为一个特殊的命令,我们将一步一步地解读其含义和可能的应用场景。
第一步:解读ping命令中的参数在这个命令中,我们可以将"v"、"i"、"s"视为三个不同的参数。
这些参数在不同的操作系统或不同版本的ping命令中,可能会有不同的含义和作用。
v参数:通常表示“verbose”(详细模式)的含义。
在ping命令中,该参数用于显示更多的输出信息,以便用户获得更详细的网络连接状态和统计数据。
例如,可以显示每个ICMP回显请求和回复的序号、时间戳、数据包大小等信息。
i参数:通常表示“interval”(间隔)的含义。
在ping命令中,该参数用于设置发送ICMP回显请求的时间间隔。
通过调整间隔时间,可以模拟不同网络负载下的网络连接状况。
较短的间隔可能会导致网络拥塞,而较长的间隔可能会导致连接断开。
s参数:通常表示“size”(大小)的含义。
在ping命令中,该参数用于设置发送的ICMP回显请求中的数据包大小。
通过调整数据包大小,可以测试网络对不同大小数据包的处理能力。
较小的数据包可能会更快地传输,而较大的数据包可能需要更长的时间传输。
第二步:探索不同参数的应用场景1. “ping v”命令的应用场景:在网络故障排除和调试过程中,通过使用“ping -v”命令可以获得更详细的信息,帮助诊断网络连接问题。
通过显示每个ICMP回显请求和回复的详细信息,可以追踪网络连接中的问题,如丢包、延迟等。
c语言实现ping功能的例子

c语言实现ping功能的例子【最新版】目录1.概述2.Ping 功能原理3.C 语言实现 Ping 功能的步骤4.代码示例5.总结正文1.概述Ping 功能是网络诊断工具中非常常用的一个功能,它可以用来测试网络中两台主机之间是否可以正常通信,以及通信的延迟情况。
在众多的编程语言中,C 语言是一种非常适合进行网络编程的语言,其具有高效的性能和底层的控制能力。
本文将介绍如何使用 C 语言实现 Ping 功能。
2.Ping 功能原理Ping 功能的原理是发送一个 ICMP(Internet Control Message Protocol,互联网控制报文协议)数据包到目标主机,然后等待目标主机的响应。
发送的数据包包含一个 ICMP Echo Request 报文,目标主机收到请求后会返回一个 ICMP Echo Reply 报文。
发送方收到响应后,可以根据响应的时间和状态判断两台主机之间的网络通信情况。
3.C 语言实现 Ping 功能的步骤(1)包含必要的头文件:在 C 语言中实现 Ping 功能,需要包含<arpa/inet.h>、<netinet/in.h>、<netinet/ip.h>、<netinet/icmp.h>等头文件。
(2)构造 ICMP 数据包:使用 socket 函数创建一个 ICMP 套接字,然后使用 sendmsg 函数发送 ICMP Echo Request 报文。
(3)接收响应:使用 recvmsg 函数接收目标主机返回的 ICMP Echo Reply 报文。
(4)解析响应:根据接收到的 ICMP Echo Reply 报文中的信息,判断网络通信的状态和延迟情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 课程设计目的(1)了解探测远程主机是否可达的方法。
(2)了解windows网络编程的基本步骤。
(3)了解TCP/IP协议及ICMP协议。
(4)掌握ping命令的思想。
(5)掌握Windows Socket API的使用方法。
2 课程设计原理ICMP:互联网控制报文协议,提供一个特殊的报文在互联网的结点之间进行监测和控制,测试目的主机是否可达,与本次课程设计目的一致,因此可模拟ICMP的工作方式来编制程序。
首先通过生成一个ICMP“回应请求”,然后将其定向至打算查询的目标主机,远程主机会拦截这个请求,然后生成一条回应答复消息,再通过网络回传给我们。
若是不能抵达目标主机,则会生成相应的错误消息。
具体步骤如下:1)创建类型为SOCK_RAW的一个套接字,同时设定协议IPPROTO_ICMP。
2)创建并初始化ICMP头。
3)调用sendto将ICMP请求发给远程主机。
4)调用recvfrom以接收ICMP响应。
其流程图如下:开始启动Winsock获取关键参数:目的主机地址创建套接字,协议字段:ICMP设置发送和接收数据最长等待时间timeout填写目的主机信息建立ICMP数据包int i=0发送和接收数据包一次,i++i<4?释放内存,关闭Winsock结束是否3程序源代码及运行结果3.1 源代码#include <winsock2.h>#include <iostream.h>#pragma comment( lib, "ws2_32.lib" )#define ICMP_ECHO 8 //回应请求类型的ICMP消息类型#define ICMP_ECHOREPLY 0 //回应答复型的ICMP消息类型#define ICMP_MIN 8 // ICMP数据报最小长度#define DEF_PACKET_SIZE 32 //默认数据报大小#define DEF_PACKET_NUMBER 4 //发送数据报的个数#define MAX_PACKET 1024 //最大ICMP数据报大小char *Ipdest; //目标主机的IP地址int datasize; //ICMP消息的长度//接收到的ICMP消息数,每收到一条ICMP消息就加1static int icmpcount=0;//IP头(20字节)struct IPHEAD{unsigned int headlength:4; // 4位头长度unsigned int version:4; // 4位版本unsigned char tos; // 8位服务类型unsigned short totallength; // 16位总长unsigned short ip_id; // 16位标识unsigned short frag_and_flags; //3个一位标识加分段偏移 unsigned char ttl; //8位存活时间unsigned char protocal; //8位协议类型unsigned short ip_checksum; //16位头校验和unsigned int sourceIP; //32位源IP地址unsigned int destIP; //32位目标IP地址};// ICMP 头(12字节)struct ICMPHEAD{unsigned char type; //类型(0,8)unsigned char code; //代码(0)unsigned short icmp_checksum; //校验和unsigned short icmp_id; //标识符unsigned short seq; //序号unsigned long timestamp; //时间戳};//Fill_icmp_data函数:用于设置ICMP头部,填充ICMP消息void Fill_icmp_data(char * icmp_data, int datasize){ICMPHEAD *icmphead=NULL;char *datapart=NULL;icmphead = (ICMPHEAD*)icmp_data;icmphead->type = ICMP_ECHO; //ICMP_ECHO=8icmphead->code = 0; //类型为8,代码为0,表示回应请求icmphead->icmp_checksum = 0;icmphead->icmp_id = (unsigned short)GetCurrentProcessId();datapart = icmp_data + sizeof(ICMPHEAD);//具体内容的首地址指针//初始化数据包内容部分for(int i=0;i<(datasize-sizeof(ICMPHEAD));i++,datapart++) *datapart=0;}//DecodeICMPHEAD函数:接受数据时从IP头中获取ICMP消息void DecodeICMPHEAD(char *recvbuf, int bread, sockaddr_in *from) {IPHEAD *iphead=NULL;ICMPHEAD *icmphead=NULL;DWORD tick;unsigned short iphdrlen;iphead = (IPHEAD *)recvbuf;//32位字的个数乘以4即字节个数iphdrlen = (iphead->headlength) * 4 ;//获取操作系统启动至今所经过的时间(ms)tick=GetTickCount();if (bread < (iphdrlen + ICMP_MIN)){cout<<"Too few bytes from: "<<inet_ntoa(from->sin_addr);cout<<endl;}icmphead = (ICMPHEAD*)(recvbuf + iphdrlen); //ICMP消息始于IP 头之后//若ICMP消息类型并非查询,则输出相应信息类型if (icmphead->type != ICMP_ECHOREPLY){cout<<"nonecho type "<<int(icmphead->type)<<" received";cout<<endl;}//确认收到的应答ICMP消息是否是对发送出去的消息的回应//若其表示与当前进程不符,则输出出错信息if (icmphead->icmp_id != (unsigned short)GetCurrentProcessId()) {cout<<"It's someone else's packet!"<<endl;return;}//输出收到信息的内容:主机地址,icmp消息序号,回应时间,存活时间cout<<"Reply from "<<inet_ntoa(from->sin_addr);cout<<" bytes="<<bread-iphdrlen;cout<<" time: "<<GetTickCount()-icmphead->timestamp<<" ms ";cout<<" seq="<<icmphead->seq;cout<<endl;icmpcount++;}//Checksum函数:用于求ICMP首部校验和unsigned short Checksum(unsigned short *buffer, int size){unsigned long cksum=0; //设校验和初值为0while(size >1){cksum+=*buffer++; //求各个16位数字之和size -=sizeof(unsigned short);}if(size){cksum += *(unsigned char*)buffer;}cksum = (cksum >> 16) + (cksum & 0xffff); //高位与低位相加cksum += (cksum >>16); //加上进位return (unsigned short)(~cksum); //取反得到校验和}//Usage函数:表示程序的功能void Usage(char *progname){cout<<"Usage:"<<progname<<" <host>"<<endl;cout<<" host remote machine to Ping"<<endl;cout<<endl;}//ValidateArgs函数:用于给目的地址和数据包大小赋值void ValidateArgs(int argc,char **argv){datasize=DEF_PACKET_SIZE; //数据包大小为DEF_PACKET_SIZE=32if(argc<2){Usage(argv[0]); //只输入一个参数:程序名Ipdest="202.119.81.120"; //默认目的地址为:202.119.81.120 }else if(argc==2)Ipdest=argv[1]; //第二个参数为目的地址}//main函数:进行建立套接字,创建ICMP头,设置超时时间,发送和接受数据等。
int main(int argc,char**argv){WSADATA wsaData;SOCKET sockRaw=INVALID_SOCKET;sockaddr_in dest,from;int destlen=sizeof(dest),fromlen=sizeof(from),bwrote,bread;char *icmp_data=NULL,*recvbuf=NULL;struct hostent *hp=NULL;unsigned short seq=0;//启动winsock失败,输出错误提示信息if (WSAStartup(MAKEWORD(2,2),&wsaData) != 0){cout<<"WSAStartup failed:"<<GetLastError();cout<<endl;return -1;}ValidateArgs(argc,argv);//创建套接字失败,输出错误信息提示sockRaw = WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL, 0,WSA_FLAG_OVERLAPPED);if (sockRaw == INVALID_SOCKET){cout<<"WSASocket() failed:"<<GetLastError();cout<<endl;return -1;}//设定发送数据时最长等待时间timeout=1000msint timeout=1000;bread=setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(timeout));if(bread==SOCKET_ERROR){cout<<"setsockopt(SO_RCVTIMEO)failed:"<<WSAGetLastError();cout<<endl;return -1;}//设定接收数据时最长等待时间timeout=1000mstimeout=1000;bread=setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(timeout));if(bread==SOCKET_ERROR){cout<<"setsockopt(SO_SNDTIMEO) failed:"<<WSAGetLastError();cout<<endl;return -1;}//解析目的地址的名称dest.sin_family=AF_INET;if(dest.sin_addr.s_addr=inet_addr(Ipdest)){//inet_addr将IP地址转换成网络地址if((hp=gethostbyname(Ipdest))!=NULL){//gethostbyname主机信息memcpy(&(dest.sin_addr),hp->h_addr,hp->h_length); //复制内存dest.sin_family=hp->h_addrtype;cout<<"dest.sin_addr="<<inet_ntoa(dest.sin_addr);cout<<endl<<'\n';}else{cout<<"gethostbyname() failed:"<<WSAGetLastError();cout<<endl;return -1;}}//建立一个ICMP数据包datasize+=sizeof(ICMPHEAD);//为要发送的数据申请内存空间,最大值为1024icmp_data=new char[MAX_PACKET];//为要接收的数据申请内存空间,最大值为1024recvbuf=new char[MAX_PACKET];//分配内存失败,输出提示信息if(!icmp_data){cout<<"new char[] failed:"<<WSAGetLastError();cout<<endl;return -1;}//将ICMP信息所在空间清零memset(icmp_data,0,MAX_PACKET);//设置ICMP信息头部Fill_icmp_data(icmp_data,datasize);//发送和接收数据,循环四次for(int i=0;i<4;i++){//ICMP信息封装((ICMPHEAD*)icmp_data)->icmp_checksum=0;((ICMPHEAD*)icmp_data)->timestamp = GetTickCount();((ICMPHEAD*)icmp_data)->seq=seq++;((ICMPHEAD*)icmp_data)->icmp_checksum =Checksum((unsigned short*)icmp_data,datasize);//发送数据bwrote = sendto(sockRaw,icmp_data,datasize,0,(sockaddr*)&dest,destlen);if (bwrote == SOCKET_ERROR){if (WSAGetLastError() == WSAETIMEDOUT){cout<<"Request timed out."<<endl;continue;}else{cout<<"sendto( ) failed:"<<WSAGetLastError();cout<<endl;return -1;}}//显示实际发送的字节数cout<<"Pinging "<<inet_ntoa(dest.sin_addr)<<" with ";cout<<bwrote<<" bytes of data:";cout<<endl;//接收数据bread=recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(sockaddr*)&from,&fromlen);if (bread == SOCKET_ERROR){if (WSAGetLastError() == WSAETIMEDOUT){cout<<"Request timed out."<<endl;continue;}cout<<"recvfrom() failed: "<<WSAGetLastError();cout<<endl;return -1;}//打开接收到的数据,从中提取ICMP头信息DecodeICMPHEAD(recvbuf,bread,&from);//等待1s钟Sleep(1000);}//输出发送的数据包数、接收的数据包数和丢失的数据包数cout<<endl;cout<<"Ping statistics for "<<inet_ntoa(dest.sin_addr)<<":"<<endl;cout<<" Packets:sent=4,";cout<<"Received="<<icmpcount;cout<<",Lost="<<DEF_PACKET_NUMBER-icmpcount;cout<<"("<<((float)(DEF_PACKET_NUMBER-icmpcount)/DEF_PACKET_NU MBER)*100;cout<<"%loss)";cout<<endl;//释放资源,关闭winsockif(sockRaw!=INVALID_SOCKET)closesocket(sockRaw);delete[] recvbuf;delete[] icmp_data;WSACleanup();return 0;}3.2 运行结果点击“开始”——“运行”——“cmd”,输入“C:\program1\Debug\zpp.exe+目标主机地址”即可运行程序。