Windows循环渐进书籍中Ping程序实现代码 #include "stdio.h" #include "iostream.h" #include "windows.h" //#include "winsock.h" #pragma comment(lib,"wsock32.lib") #define DEF_BUF_SIZE 1024 #define ICMP_DATA_SIZE 32 #define IP_HEADER_SIZE 20 #define ICMP_HEADER_SIZE 12 #define ICMP_PACK_SIZE ICMP_HEADER_SIZE+ICMP_DATA_SIZE typedef struct _ICMP_HEADER { BYTE bType;//类型 BYTE bCode;//代码 USHORT nCheckSum;//校验和 USHORT nId;//标识本进程ID USHORT nSequence;//序列号 UINT nTimeStamp;//用于计算时间 }ICMP_HEADRE,*PICMP_HEADER; USHORT GetCheckSum(LPBYTE lpBuf,DWORD dwSize) { DWORD dwCheckSum=0; USHORT* lpWord=(USHORT*)lpBuf; while(dwSize>1) { dwCheckSum+=*lpWord++; dwSize-=2; } if(dwSize==1) { dwCheckSum+=*((LPBYTE)lpWord); } dwCheckSum=(dwCheckSum>>16)+(dwCheckSum&0xFFFF); //取反 return (USHORT)(~dwCheckSum); } BOOL Ping(char* lpDestIp) { SOCKADDR_IN destSockAddr; destSockAddr.sin_family=AF_INET; de