如何使用回调示例vc实现icmpsendecho2异步

时间:2013-05-03 05:25:31

标签: windows winapi visual-c++

我需要使用IcmpSendEcho2 API命令异步使用 ApcRoutine回调例程。

我遇到的问题是ApcRoutine的签名是什么样的 我需要定义回调例程吗?

当我调用IcmpSendEcho2时,第三个参数会是什么样的?

我有15个代理请求要发送。我应该只使用IcmpSendEcho2一次或多次请求。

如果我需要一次发送许多IcmpSendEcho2请求。怎么会 回调ApcRoutine知道哪个IcmpSendEcho2调用已完成。我猜这个 是ApcContext参数发挥作用的地方吗?

我在MSDN或其他地方找不到任何示例代码 至 异步使用IcmpSendEcho2命令。

1 个答案:

答案 0 :(得分:1)

int ReplyCame(PVOID param)
{
 char* szAddr = (char*) param;

 printf("Replay Came for %s......\n", szAddr);

 return 0;
}

char* szAddr1 = "172.18.1.1";
char* szAddr2 = "172.18.1.4";

int _tmain(int argc, _TCHAR* argv[])
{
 char *SendData = "Data Buffer";
 LPVOID ReplyBuffer;

 HANDLE IcmpHandle = IcmpCreateFile();

 IPAddr addr1 = inet_addr(szAddr1);
 IPAddr addr2 = inet_addr(szAddr2);

 ReplyBuffer = (VOID*) malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));

 IcmpSendEcho2(IcmpHandle, NULL, (FARPROC)ReplyCame, szAddr1, addr1, 
SendData, sizeof(SendData), NULL, ReplyBuffer, 8*sizeof(ReplyBuffer) + 
sizeof(ICMP_ECHO_REPLY), 1000);
 IcmpSendEcho2(IcmpHandle, NULL, (FARPROC)ReplyCame, szAddr2, addr2, 
SendData, sizeof(SendData), NULL, ReplyBuffer, 8*sizeof(ReplyBuffer) + 
sizeof(ICMP_ECHO_REPLY), 1000);

 SleepEx(5000, TRUE);

 return 0;
}

请注意,如果你想使用replyBuffer,你需要在使用IcmpParseReplies之前解析它。