怎么取得本机的IP地址,并把IP地址负给SOCKADDR_IN的变量。

解决方案 »

  1.   

    char hostname[256];
    struct hostent *phost;
    gethostname(hostname, 256);
    phost=gethostbyname(hostname);   struct sockaddr_in addr;
    addr.sin_addr=*(in_addr*)phost->h_addr_list[0];
    addr.sin_family=AF_INET;
    addr.sin_port=htons(4001);
      

  2.   

    获得本地IP地址列表代码int GetIpAddress(const CString &sHostName, CStringArray &sIpAddress)
    {
    struct hostent FAR * lpHostEnt=gethostbyname(sHostName);
    sIpAddress.RemoveAll();
    if(lpHostEnt==NULL)
    {
    //产生错误
    return GetLastError();
    }
    //获取IP
    int i=0;
    LPSTR lpAddr=lpHostEnt->h_addr_list[i];
    CString temp;
    while(lpAddr)
    {
    i++;
    struct in_addr inAddr;
    memmove(&inAddr,lpAddr,4);
    //转换为标准格式
    temp=inet_ntoa(inAddr);
    if(temp.IsEmpty())
    {
    break;
    }
    sIpAddress.Add(temp);
    lpAddr=lpHostEnt->h_addr_list[i];
    }
    return 0;
    }
    调用:if(AfxSocketInit(NULL)==FALSE)//初始化socket
    {
    AfxMessageBox("Socket Error");
    }

    CStringArray ip;
             CString m_sHostName;
    char hosttemp[256];
    gethostname(hosttemp,256);
    m_sHostName=hosttemp;//如果这里,m_sHostName="www.163.com",将得到网易的IP

    GetIpAddress(dlg.m_sHostName,ip);//获得本地IP
    CString temp;
    int i=0;
    while(i<ip.GetSize())
    {

    temp+=ip[i];
    temp+=";\n";
    i++;
    }
    MessageBox(dlg.m_sHostName+"的IP是:\n"+temp);
    }
      

  3.   

    赋值给 SOCKADDR_IN 变量struct sockaddr_in addr;// lpHostEnt->h_addr_list[0];为前面获得的IP地址列表
    // 如果有多个IP,则依次类推 lpHostEnt->h_addr_list[1]等等addr.sin_addr=*(in_addr*)lpHostEnt->h_addr_list[0];   
      

  4.   

    不过不知道是不是楼主在建立服务器的时候初始化socket用的如果不是必须根本不需要获得本机IP再来复制这么复杂直接这样就好了 SOCKADDR_IN ServerAddr;                    //分配端口及协议族并绑定 ServerAddr.sin_family=AF_INET;
    ServerAddr.sin_addr.S_un.S_addr  =htonl(INADDR_ANY);  // 这样就好了
    ServerAddr.sin_port=htons(12345);
      

  5.   

    INADDR_ANY允许将套接字绑定到系统中所有可用的接口,以便将来传导任意接口上的客户机连接都可以被监听套接字接受^_^
      

  6.   

    对,想获取本机ip倒是不难,不过要绑定本机地址根本没有必要获得本机真实ip,只需绑定INADDR_ANY就行了,它就是本机的意思。绑定这个地址也就对应着0.0.0.0,你用netstat -an命令查看一下本机打开的端口,其中有很多本机地址为0.0.0.0的项都对应着这种绑定方式。
    如果楼主实在想要获得本机ip,就先gethostname,然后gethostbyname,具体的前面几位已经讲了。