C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[21332] Re:Builder용은 없나요?
통일바라기 [] 1028 읽음    2002-09-09 17:49

너무 많은 것을 요청드리는것 같아서...

김재구 님이 쓰신 글 :
: #include <windows.h>
: #include <winsock.h>
: #include <stdio.h>
: #include <string.h>
:
: typedef struct tagIPINFO
: {
:     u_char Ttl;                // Time To Live
:     u_char Tos;                // Type Of Service
:     u_char IPFlags;            // IP flags
:     u_char OptSize;            // Size of options data
:     u_char FAR *Options;    // Options data buffer
: }IPINFO, *PIPINFO;
:
: typedef struct tagICMPECHO
: {
:     u_long Source;            // Source address
:     u_long Status;            // IP status
:     u_long RTTime;            // Round trip time in milliseconds
:     u_short DataSize;        // Reply data size
:     u_short Reserved;        // Unknown
:     void FAR *pData;        // Reply data buffer
:     IPINFO    ipInfo;            // Reply options
: }ICMPECHO, *PICMPECHO;
:
:
: // ICMP.DLL Export Function Pointers
: HANDLE (WINAPI *pIcmpCreateFile)(VOID);
: BOOL (WINAPI *pIcmpCloseHandle)(HANDLE);
: DWORD (WINAPI *pIcmpSendEcho)
:     (HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD);
:
: //
: //
: void main(int argc, char **argv)
: {
:     WSADATA wsaData;            // WSADATA
:     ICMPECHO icmpEcho;            // ICMP Echo reply buffer
:     HANDLE hndlIcmp;            // LoadLibrary() handle to ICMP.DLL
:     HANDLE hndlFile;            // Handle for IcmpCreateFile()
:     LPHOSTENT pHost;            // Pointer to host entry structure
:     struct in_addr iaDest;        // Internet address structure
:     DWORD *dwAddress;            // IP Address
:     IPINFO ipInfo;                // IP Options structure
:     int nRet;                    // General use return code
:     DWORD dwRet;                // DWORD return code
:     int x;
:
:     // Check arguments
:     if (argc != 2)
:     {
:         fprintf(stderr,"\nSyntax: pingi HostNameOrIPAddress\n");
:         return;
:     }
:
:     // Dynamically load the ICMP.DLL
:     hndlIcmp = LoadLibrary("ICMP.DLL");
:     if (hndlIcmp == NULL)
:     {
:         fprintf(stderr,"\nCould not load ICMP.DLL\n");
:         return;
:     }
:     // Retrieve ICMP function pointers
:     pIcmpCreateFile = (HANDLE (WINAPI *)(void))
:         GetProcAddress(hndlIcmp,"IcmpCreateFile");
:     pIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE))
:         GetProcAddress(hndlIcmp,"IcmpCloseHandle");
:     pIcmpSendEcho = (DWORD (WINAPI *)
:         (HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD))
:         GetProcAddress(hndlIcmp,"IcmpSendEcho");
:     // Check all the function pointers
:     if (pIcmpCreateFile == NULL        ||
:         pIcmpCloseHandle == NULL    ||
:         pIcmpSendEcho == NULL)
:     {
:         fprintf(stderr,"\nError getting ICMP proc address\n");
:         FreeLibrary(hndlIcmp);
:         return;
:     }
:
:     // Init WinSock
:     nRet = WSAStartup(0x0101, &wsaData );
:     if (nRet)
:     {
:         fprintf(stderr,"\nWSAStartup() error: %d\n", nRet);
:         WSACleanup();
:         FreeLibrary(hndlIcmp);
:         return;
:     }
:     // Check WinSock version
:     if (0x0101 != wsaData.wVersion)
:     {
:         fprintf(stderr,"\nWinSock version 1.1 not supported\n");
:         WSACleanup();
:         FreeLibrary(hndlIcmp);
:         return;
:     }
:
:     // Lookup destination
:     // Use inet_addr() to determine if we're dealing with a name
:     // or an address
:     iaDest.s_addr = inet_addr(argv[1]);
:     if (iaDest.s_addr == INADDR_NONE)
:         pHost = gethostbyname(argv[1]);
:     else
:         pHost = gethostbyaddr((const char *)&iaDest,
:                         sizeof(struct in_addr), AF_INET);
:     if (pHost == NULL)
:     {
:         fprintf(stderr, "\n%s not found\n", argv[1]);
:         WSACleanup();
:         FreeLibrary(hndlIcmp);
:         return;
:     }
:
:     // Tell the user what we're doing
:     printf("\nPinging %s [%s]", pHost->h_name,
:             inet_ntoa((*(LPIN_ADDR)pHost->h_addr_list[0])));
:
:     // Copy the IP address
:     dwAddress = (DWORD *)(*pHost->h_addr_list);
:
:     // Get an ICMP echo request handle       
:     hndlFile = pIcmpCreateFile();
:     for (x = 0; x < 4; x++)
:     {
:         // Set some reasonable default values
:         ipInfo.Ttl = 255;
:         ipInfo.Tos = 0;
:         ipInfo.IPFlags = 0;
:         ipInfo.OptSize = 0;
:         ipInfo.Options = NULL;
:         //icmpEcho.ipInfo.Ttl = 256;
:         // Reqest an ICMP echo
:         dwRet = pIcmpSendEcho(
:             hndlFile,        // Handle from IcmpCreateFile()
:             *dwAddress,        // Destination IP address
:             NULL,            // Pointer to buffer to send
:             0,                // Size of buffer in bytes
:             &ipInfo,        // Request options
:             &icmpEcho,        // Reply buffer
:             sizeof(struct tagICMPECHO),
:             5000);            // Time to wait in milliseconds
:         // Print the results
:         iaDest.s_addr = icmpEcho.Source;
:         printf("\nReply from %s  Time=%ldms  TTL=%d",
:                 inet_ntoa(iaDest),
:                 icmpEcho.RTTime,
:                 icmpEcho.ipInfo.Ttl);
:         if (icmpEcho.Status)
:         {
:             printf("\nError: icmpEcho.Status=%ld",
:                 icmpEcho.Status);
:             break;
:         }
:     }
:     printf("\n");
:     // Close the echo request file handle
:     pIcmpCloseHandle(hndlFile);
:     FreeLibrary(hndlIcmp);
:     WSACleanup();
: }
:

+ -

관련 글 리스트
30551         Re:win32용 ping 소스파일입니다. 통일바라기 1491 2002/09/09
21332         Re:Builder용은 없나요? 통일바라기 1028 2002/09/09
21404             Re:Re:Builder용은 없나요? 유영인.Chris 1577 2002/09/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.