我是说在VC中如何实现了,也就是实现ping的功能

解决方案 »

  1.   

    ping那个IP,ping不到就是没人正在用。
      

  2.   

    ping的代码很多,随便找一个看看吧!
      

  3.   

    这个问题复杂了,不是一句话能说的清楚的。
    奖金先发了,给个E-mail,我给你一个ping源程序。
      

  4.   

    不用什么ping类,用函数ICMPECHO即可,在icmp.dll中,加载即可
      

  5.   

    ping 是没有办法的,有些主机关闭了ICMP请求的回复。用arp和rarp协议吧。
      

  6.   

    拙见:
      试试gethostbyaddr()这个函数吧。它可以根据机器的IP地址返回一个机器的名字,
    如果不能返回,则这台机器就没开了。[email protected]
      

  7.   

    同意scklotz :
      用ARP,windows的Internet helper SDK中一个函数搞定。
      

  8.   

    我用SendARP()这个函数时,好有成功,错误为87,这个错误号应该是参数错误吧,我的程序如下:
    IPAddr lSIP;
    IPAddr lDIP;
    PULONG pulMac=new ULONG;
    PULONG pulLng=new ULONG;
    WSADATA wsaData;
    DWORD dwRtn;
    if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
    fprintf(stderr,"WSAStartup failed with error %d\n",WSAGetLastError());
    WSACleanup();
    //return -1;
    }
    lSIP=inet_addr("10.168.168.168");
    lDIP=inet_addr("10.168.168.163");
    dwRtn=SendARP(lDIP,lSIP,pulMac,pulLng);
    int i=WSAGetLastError ();
    请问我的程序错在哪呢?
      

  9.   

    msdn里实现的例子如下:
    //
    // Link with ws2_32.lib and iphlpapi.lib
    //#include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    #include <iphlpapi.h>
    int __cdecl main()
    {
        HRESULT hr;
        IPAddr  ipAddr;
        ULONG   pulMac[2];
        ULONG   ulLen;    ipAddr = inet_addr ("216.145.25.31");
        memset (pulMac, 0xff, sizeof (pulMac));
        ulLen = 6;
        
        hr = SendARP (ipAddr, 0, pulMac, &ulLen);
        printf ("Return %08x, length %8d\n", hr, ulLen);
        
        size_t i, j;
        char * szMac = new char[ulLen*3];
        PBYTE pbHexMac = (PBYTE) pulMac;    //
        // Convert the binary MAC address into human-readable
        //
        for (i = 0, j = 0; i < ulLen - 1; ++i) {
            j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
        }
        
        sprintf (szMac + j, "%02X", pbHexMac[i]);
        printf ("MAC address %s\n", szMac);
        
        delete [] szMac;    return 0;
    }