• windows下用C++获取本机IP地址


    BSTR CamUtilsCtrl::GET_TERM_IP(void)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    CString strResult;

    // TODO: 在此添加调度处理程序代码
    WSADATA wsaData;
    WORD sockVersion = MAKEWORD(2,2);
    //初始化socket环境
    if(::WSAStartup(sockVersion,&wsaData)!=0)
    {
    tracelog3(LOG_INFO,"WSAStartup failed.ErrorCode=%d",GetLastError());
    exit(0);
    }

    //获得主机名称
    char szHost[256]={0};
    ::gethostname(szHost,256);
    tracelog3(LOG_INFO,"主机名=%s",szHost);
    //获得主机名称下的网络信息
    hostent *pHost = ::gethostbyname(szHost); //返回指定主机名的包含主机名字和地址信息的hostent结构的指针
    /*struct hostent
    {
    char *h_name; //正式主机名
    char ** h_aliases; //主机别名
    short h_addrtype; //主机IP地址类型:IPV4-AF_INET
    short h_length; //主机I票地址字节长度,IPV4是4字节,即32位
    char ** h_addr_list; //主机的IP地址列表
    };*/

    //处理获得的网络信息
    in_addr addr;
    CString strTmp,strBuf;
    for(int i=0;;i++)
    {
    char *p = pHost->h_addr_list[i];
    if(p==NULL)
    break;
    memcpy(&addr.S_un.S_addr,p,pHost->h_length);
    char *slzp = ::inet_ntoa(addr); //将sin_addr储存的IP(数值)转换成字符串形式(127.0.0.1)
    strBuf = slzp;
    strTmp.Append((strBuf+"|"));
    }
    //关闭socket环境
    ::WSACleanup();
    strTmp.TrimRight("|");
    //EVTFSNMESSAGE(strTmp);
    strResult = strTmp;

    return strResult.AllocSysString();
    }

  • 相关阅读:
    深入Java微服务之网关系列1:什么是网关
    logstash系列快速调试demo
    logstash系列input和output方案预研结果
    99zeppelin使用和一些预研
    filebeat系列如何给日志增加一些额外的标记字段
    filebeat系列快速调试demo
    logstash系列使用中的一些点
    Redis常用命令
    springboot使用外置tomcat
    Redis持久化和事务
  • 原文地址:https://www.cnblogs.com/jieliujas/p/9045438.html
Copyright © 2020-2023  润新知