0

ApcRoutine コールバック ルーチンを使用して、非同期で IcmpSendEcho2 API コマンドを使用する必要があります。

質問は、定義する必要がある ApcRoutine コールバック ルーチンの署名はどのようになるかということです。

IcmpSendEcho2 を呼び出すと、3 番目のパラメーターはどのようになりますか?

15 個のプロキシ リクエストを送信する必要があります。IcmpSendEcho2 で 1 回または複数回要求する必要があります。

一度に多くの IcmpSendEcho2 リクエストを送信する必要がある場合。コールバック ApcRoutine は、どの IcmpSendEcho2 呼び出しが行われたかをどのように認識しますか。これが ApcContext パラメータの出番だと思いますか?

IcmpSendEcho2 コマンドを非同期的に使用する方法を示すサンプル コードは、MSDN やその他の場所で見つけることができません。

4

1 に答える 1

2
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 で解析する必要があることに注意してください。

于 2013-10-02T20:04:25.647 に答える