知道一台电脑的IP,怎么才能知道PING不PING得通,求这样的代码谢谢各位高手啦

解决方案 »

  1.   

    http://www.codeguru.com/internet/cping.shtml
      

  2.   

    将命令行输出重定向到文件,然后ShellExecute,ping IP,在文本中读取结果?
      

  3.   

    NetTst::~NetTst()
    {
    closesocket (sockRaw);  
    sockRaw= INVALID_SOCKET;  
    WSACleanup(); 
    }
    BOOL NetTst::Autotest(char far * szDestHost,int Ktest)  

    struct sockaddr_in dest,from; 
    char icmp_data[10], recvbuf[100];  
    unsigned int addr=0; 
    int fromlen = sizeof(from);  
    int timeout = 1000;//ms
    sockRaw = socket (AF_INET,SOCK_RAW,IPPROTO_ICMP);  
    setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO, 
    (char*)&timeout,sizeof(timeout) ); 
    memset(&dest,0,sizeof(dest));  
    dest.sin_family = AF_INET; 
    dest.sin_addr.s_addr= inet_addr(szDestHost);  
    memset(icmp_data,0,sizeof(icmp_data)); //clear icmp_data. 
    ((IcmpHeader*)icmp_data)->i_type = 8; //ICMP_ECHO 
    ((IcmpHeader*)icmp_data)->i_code = 0; 
    ((IcmpHeader*)icmp_data)->i_id = (u_short)GetCurrentProcessId(); 
    ((IcmpHeader*)icmp_data)->i_seq = 0;  for(int k=0; k<Ktest;k++ )
    {  
    ((IcmpHeader*)icmp_data)->i_cksum = 0;  
    ((IcmpHeader*)icmp_data)->i_seq ++; 
    ((IcmpHeader*)icmp_data)->i_cksum=checksum((u_short*)icmp_data,8);  
    sendto(sockRaw,icmp_data,8,0,(struct sockaddr*)&dest,sizeof(dest));  
    int bread=recvfrom(sockRaw,recvbuf,1024,0,(struct sockaddr*)&from,&fromlen); 
    if (bread == SOCKET_ERROR)

    if(k==Ktest-1) 
    return FALSE ;  
    else 
    continue; //try again(3 times) 
    }  
    }  
    return TRUE; //no erros. }