我试过了, 在本机不能联入外网时(比如输入一个错误网关), 如果用该函数ping 外网IP, 一会该函数成功(返回非0), 一会不成功.
我是用线程循环调用该函数测的.在xp正常.IcmpSendEcho()在win7下可以用吗?BOOL SendPingByIp(char * sIP)
{
HANDLE hIcmpFile;
unsigned long ipaddr = INADDR_NONE;
DWORD dwRetVal = 0;
char SendData[] = "Data Buffer";
LPVOID ReplyBuffer = NULL;
DWORD ReplySize = 0;
ipaddr = inet_addr(sIP); if (ipaddr == INADDR_NONE)
return FALSE;
hIcmpFile = IcmpCreateFile();
if (hIcmpFile == INVALID_HANDLE_VALUE) {
return FALSE;
} ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData);
ReplyBuffer = (VOID*) malloc(ReplySize);
if (ReplyBuffer == NULL) {
CloseHandle(hIcmpFile);
return FALSE;
}
dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData),
NULL, ReplyBuffer, ReplySize, 6000);
if (dwRetVal == 0)
{
free(ReplyBuffer);
CloseHandle(hIcmpFile);
return FALSE;
} free(ReplyBuffer);
CloseHandle(hIcmpFile);
return TRUE;
}
我是用线程循环调用该函数测的.在xp正常.IcmpSendEcho()在win7下可以用吗?BOOL SendPingByIp(char * sIP)
{
HANDLE hIcmpFile;
unsigned long ipaddr = INADDR_NONE;
DWORD dwRetVal = 0;
char SendData[] = "Data Buffer";
LPVOID ReplyBuffer = NULL;
DWORD ReplySize = 0;
ipaddr = inet_addr(sIP); if (ipaddr == INADDR_NONE)
return FALSE;
hIcmpFile = IcmpCreateFile();
if (hIcmpFile == INVALID_HANDLE_VALUE) {
return FALSE;
} ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData);
ReplyBuffer = (VOID*) malloc(ReplySize);
if (ReplyBuffer == NULL) {
CloseHandle(hIcmpFile);
return FALSE;
}
dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData),
NULL, ReplyBuffer, ReplySize, 6000);
if (dwRetVal == 0)
{
free(ReplyBuffer);
CloseHandle(hIcmpFile);
return FALSE;
} free(ReplyBuffer);
CloseHandle(hIcmpFile);
return TRUE;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货