如何判断机器已经能够上网?如何获得这个上网的IP地址?也许这个机器在局域网内,也许这个机器有多个网卡多个IP,也许这个机器为主机,也许这个机器上网有固定IP,也许这个机器是动态IP……。高分求好的思路

解决方案 »

  1.   

    DWORD GetOutAddr(SOCKET hSocket, LPCTSTR pszTargetAddr)
    {
    DWORD dwBytesReturned = 0;
    struct sockaddr_in saTarget;
    struct sockaddr_in saSource;
    memset(&saSource, 0, socksize);
    memset(&saTarget, 0, socksize); saTarget.sin_family = saSource.sin_family = AF_INET;
    saTarget.sin_addr.s_addr = inet_addr(pszTargetAddr);
    WSAIoctl(hSocket, SIO_ROUTING_INTERFACE_QUERY, (LPVOID)&saTarget,
    sizeof(sockaddr_in), (LPVOID)&saSource, sizeof(sockaddr_in),
    &dwBytesReturned, NULL, NULL); return saSource.sin_addr.s_addr;
    }// sample:
    DWORD dwOutAddr = GetOutAddr(s, "202.102.1.54");
    char* szOutAddr = inet_nta(*(INADDR*)&dwOutAddr);
      

  2.   

    进来看看不知道除了自己来ping或者自己来向外做连接以外,是否还有更好的办法?
      

  3.   

    你首先应该查到你的IP地址
    然后再在开始菜单中,单击运行在打开中输入cmd回车
    在ping_________(你的IP地址)
      

  4.   

    TO zxl6328(明月):
    如果是拨号上网,动态IP的,网都没有上,我取哪里找IP地址啊?
      

  5.   

    查询IP后,得到是一个IP列表,你挨个ping就可以了,是不是动态IP有什么关系
      

  6.   

    TO:jzyhummel(刀锋[影忍])
    如果在局域网内的计算机,我拔掉网线,都可以ping通自己的IP啊
      

  7.   

    首先通过ipconfig看看自己主机是否配置了IP地址,这个与是不是动态IP没有什么关系。
    如果有IP地址说明你已经连在网络上了。
      

  8.   

    TO:coolali(生命之桥)
    只要装了个网卡,ipconfig就能看到有ip
      

  9.   

    我觉得还是获得当前的IP地址列表,然后用这些IP来ping了,还是可以实现这个功能的
      

  10.   

    向127.0.0.1连接,如果成功就是上网了...得到IP地址用GetHostName()
      

  11.   

    向127.0.0.1连接,如果成功就是上网了...得到IP地址用GetHostName()=======================================================================
    没装有网卡都能PING得通的.
      

  12.   

    查是否已经上网的话,可以在程序里ping一个某个web ip,如果有返回,说明已经上网。
      

  13.   

    /*
    函数:取得本机IP
    */
    CString CSystemInfo::GetLocalIP()
    {   
    ::AfxSocketInit();     CString m_addr;
    CString m_strT;
    CString sNetBiosName;
    char hostname[128];
    struct hostent *phost;
    gethostname(hostname,128);
    m_addr = hostname;
    phost = gethostbyname(hostname);
    int m_iCounter=0;
    for(int j = 0;j<4;j++)
    {
    m_strT.Format("%u", (unsigned int)((unsigned char*)phost->h_addr_list[0])[j]);
    sNetBiosName+=m_strT;
    if(m_iCounter<3)
    {
    m_iCounter++;
    sNetBiosName+=".";
    }  
    }
    return sNetBiosName;
    }
      

  14.   

    To  howtotell(从何谈起) :
    你的代码得到的是机器IP列表里面的第一个IP地址,不知道有没有方法判断IP列表里面哪个IP是当前上网用的地址??
      

  15.   

    在自己的程序里实现ping程序,去ping别人,通了就是可以上。不通就不能上。
      

  16.   

    呵呵,不管动态还是静态,自己的机器名总只有一个吧,ping 自己的机器名就可以了,既可以知道是否上网,也可以知道IP
      

  17.   

    Pinging MyPCName [100.100.100.110] with 32 bytes of data:Reply from 100.100.100.110: bytes=32 time=7ms TTL=128
    Reply from 100.100.100.110: bytes=32 time<1ms TTL=128
    Reply from 100.100.100.110: bytes=32 time<1ms TTL=128
    Reply from 100.100.100.110: bytes=32 time<1ms TTL=128Ping statistics for 100.100.100.110:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 7ms, Average = 1ms这个100.100.100.110是在局域网里面的IP地址啊,而不是公网IP
      

  18.   

    要ping的话,肯定应该是ping公网的IP了。ping局域网里的IP没用的。
    只要局域网是好的就能ping通,但不一定可以上网。
      

  19.   

    判断是否上网,可以ping 公网。
    如果是拨号上网,可以用RasEnumConnections取得连接