需要包括的头文件与库文件:
#include "Winsock2.h" // PING #include "Ipexport.h" #include "Icmpapi.h" #include "winsock.h" extern HWND ghMainWnd; #pragma comment (lib, "Iphlpapi.lib") #pragma comment (lib, "Ws2.lib")
源代码如下:
int Ping(TCHAR *Address , int iTtl , int iWaitTime , TCHAR *szName , int *prtt) { IPAddr ipAddress ; IP_OPTION_INFORMATION ipInfo ; ICMP_ECHO_REPLY icmpEcho; HANDLE hFile; char strHost [ MAX_PATH ] ; TCHAR szPCName [ MAX_PATH ] = { TEXT( "" ) } ; int iRet = -1 ; struct in_addr iaDest; // Internet address structure LPHOSTENT pHost; // Pointer to host entry structure RETAILMSG(1,(L"TICK: %d - [TCP Client]Enter Ping......\r\n",GetTickCount() / 1000)); _tcscpy( szName , TEXT("") ); WideCharToMultiByte( CP_ACP, 0, Address , -1, strHost, sizeof( strHost ), NULL, FALSE ); ipAddress = inet_addr(strHost); iaDest.s_addr = inet_addr(strHost); if (iaDest.s_addr == INADDR_NONE) { pHost = gethostbyname(strHost); if( pHost ) { char *pIP ; iaDest.S_un.S_addr = *(DWORD *)(*pHost->h_addr_list) ; pIP = inet_ntoa( iaDest ) ; if( strlen( pIP ) ) MultiByteToWideChar( CP_ACP, 0, pIP , -1, szPCName, sizeof( szPCName ) ); if( _tcslen( szPCName ) ) _tcscpy( szName , szPCName ); } } else { pHost = gethostbyaddr((const char *)&iaDest, sizeof(struct in_addr), AF_INET); if( pHost ) { MultiByteToWideChar( CP_ACP, 0, pHost->h_name , -1, szPCName, sizeof( szPCName ) ); if( _tcslen( szPCName ) ) _tcscpy( szName , szPCName ); } } if( pHost ) ipAddress = *(DWORD *)(*pHost->h_addr_list) ; if (ipAddress != INADDR_NONE) { iRet = 0 ; hFile = IcmpCreateFile(); // Set some reasonable default values ipInfo.Ttl = iTtl ; ipInfo.Tos = 0; ipInfo.Flags = 0; ipInfo.OptionsSize = 0 ; ipInfo.OptionsData = NULL ; icmpEcho.Status = IP_REQ_TIMED_OUT/*IP_SUCCESS*/ ; IcmpSendEcho( hFile , ipAddress , NULL , 0 , (PIP_OPTION_INFORMATION)&ipInfo, &icmpEcho , sizeof(ICMP_ECHO_REPLY) , iWaitTime ) ; IcmpCloseHandle(hFile) ; if ( icmpEcho.Status == IP_SUCCESS ) iRet = 1 ; *prtt = icmpEcho.RoundTripTime ; } return iRet ; }
static LPTSTR strIpAddr[] = { L"202.96.209.5", // 上海 DNS L"220.181.6.18", // 百度 L"202.100.4.15", // 西安 DNS };
TCHAR tcName[MAX_PATH] = {0}; int iPtt = 0;
int iPingRet = Ping(strIpAddr[giPingIndex],128,3000,tcName,&iPtt); //ping tmc server if(iPingRet == 1) { RETAILMSG(1, (TEXT("TICK: %d - Ping IP: %s Success.\r\n"),GetTickCount() / 1000, strIpAddr[giPingIndex])); } else
{
// 失败
}