急!!!帮帮忙!!!

解决方案 »

  1.   

    如下几种方法共参考
    1、  bool GetIP1()
    {
    bool m_bVeri = false; addrinfo hints, *result = NULL;
    memset(&hints, 0, sizeof(hints));
    hints.ai_flags = AI_PASSIVE;
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    char szhostname[128];
    gethostname(szhostname,sizeof(szhostname));
    if (getaddrinfo(static_cast<LPCTSTR>(szhostname), 0, &hints, &result) != 0)
    return m_bVeri; //if (getnameinfo(result->ai_addr, result->ai_addrlen, m_sIP, 256, NULL, 0, NI_NUMERICHOST) != 0)
    // return m_bVeri; m_bVeri = true;
    addrinfo* paddr;
    paddr=result;
    int i=0;
    while(paddr!=NULL)
    {
    char tmp[256];
    wsprintf(tmp,"the %d address name:%s,",i,paddr->ai_canonname);
    OutputDebugString(tmp);
    print_sockaddr(paddr->ai_addr);
    paddr=paddr->ai_next;
    }
    freeaddrinfo(result);
    return m_bVeri; 
    }
    2、   假设你有了名为My的对话框工程.有一个按钮并有响应的程序:如OnButton1();
        BOOL CListCtrl1Dlg::OnInitDialog()
        {
            CDialog::OnInitDialog();
            AfxSocketInit(NULL);//支持Socket.若在向导是没选Support Socket,这就的加.还要加#include <afxsock.h>在StdAfx.h中.        .......
            // Add "About..." menu item to system menu.        // IDM_ABOUTBOX must be in the system command range.
          
            // TODO: Add extra initialization here        return TRUE;  // return TRUE  unless you set the focus to a control
        }
      
        void CListCtrl1Dlg::OnButton1() 
        {
            WORD wVersionRequested;
            WSADATA wsaData;
            char name[255];
            CString ip;
            PHOSTENT hostinfo;
            wVersionRequested = MAKEWORD( 2, 0 );        if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
            {              if( gethostname ( name, sizeof(name)) == 0)
                  {
                        if((hostinfo = gethostbyname(name)) != NULL)
                        {
                              ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
                        }
                  }
                
                  WSACleanup( );
            } 
            AfxMessageBox(name);//name里是本机名
            AfxMessageBox(ip);  //ip中是本机IP
        } 
    3、// TODO: 获得本机的IP地址。子网掩码。广播地址
    STDMETHODIMP CSysInfo::GetIPsAddress(BSTR *pIPAddress,BSTR *pSubnetVal,BSTR *pBroadcastAddr,int* pIPsCounter)
    {    
        wchar_t strIPAddress[1000];
        ::ZeroMemory(&strIPAddress,sizeof(strIPAddress));
        wchar_t strSubnetMask[1000];
        ::ZeroMemory(&strSubnetMask,sizeof(strSubnetMask));
        wchar_t strBroadcastAddr[1000];
        ::ZeroMemory(&strBroadcastAddr,sizeof(strBroadcastAddr));    char cBuffer[10000];
        ::ZeroMemory(&cBuffer,sizeof(cBuffer));
        PMIB_IPADDRTABLE pTable = (PMIB_IPADDRTABLE)cBuffer;
        DWORD dwSize = sizeof(cBuffer);
        if(GetIpAddrTable(pTable,&dwSize,FALSE) == NO_ERROR)
        {
            wchar_t strIPItem[100];        
            *pIPsCounter = pTable->dwNumEntries;
            for(int i=0;i< *pIPsCounter;i++)
            {            
                DWORD addr = pTable->table[i].dwAddr;
                DWORD subnet = pTable->table[i].dwMask;
                DWORD broadcast = pTable->table[i].dwBCastAddr;
                // Filter 127.0.0.1
                if (addr != 0x0100007f)
                {
                    ::ZeroMemory(&strIPItem,sizeof(strIPItem));
                    swprintf(strIPItem,L"%d.%d.%d.%d",(addr & 0xFF),((addr >> 8) & 0xFF),((addr >> 16) & 0xFF),((addr >> 24) & 0xFF));
                    wcscat(strIPAddress,strIPItem);
                    ::ZeroMemory(&strIPItem,sizeof(strIPItem));
                    swprintf(strIPItem,L"%d.%d.%d.%d",(subnet & 0xFF),((subnet >> 8) & 0xFF),((subnet >> 16) & 0xFF),((subnet >> 24) & 0xFF));
                    wcscat(strSubnetMask,strIPItem);
                    ::ZeroMemory(&strIPItem,sizeof(strIPItem));
                    swprintf(strIPItem,L"%d.%d.%d.%d",(broadcast & 0xFF),((broadcast >> 8) & 0xFF),((broadcast >> 16) & 0xFF),((broadcast >> 24) & 0xFF));
                    wcscat(strBroadcastAddr,strIPItem);
                }
            }
        }
        *pIPAddress = SysAllocString(strIPAddress);
        *pSubnetVal = SysAllocString(strSubnetMask);
        *pBroadcastAddr = SysAllocString(strBroadcastAddr);
        return S_OK;

     
      

  2.   

    我们用ipconfig时总会看得到ip地址,可否这样呢:
    system("ipconfig>a.txt")
    执行这个语句后会在相应的目录里有一个a.txt其内容如下:
    Windows 2000 IP ConfigurationEthernet adapter 本地连接: Connection-specific DNS Suffix  . : 
    IP Address. . . . . . . . . . . . : 10.88.109.237 Subnet Mask . . . . . . . . . . . : 255.255.254.0 Default Gateway . . . . . . . . . : 10.88.108.2
    你可以打开它取行ip地址!
    见笑啦,我vc不怎么样!不过可以考虑考虑这个方法!
      

  3.   

    用这个:
    // Get computer name
    char szComputerName[128];
    DWORD dwLen = 128;
    ::GetComputerName(szComputerName, &dwLen); // Get local IP
    CString csLocalIP = _T("");
    HOSTENT *pHostent = gethostbyname(szComputerName);
    unsigned char chIP[4];
    memcpy(chIP, *(pHostent->h_addr_list), 4);
    csLocalIP.Format("%d.%d.%d.%d", chIP[0], chIP[1], chIP[2], chIP[3]);