zoukankan      html  css  js  c++  java
  • Getaddrinfo()笔记

    WSADATA dwRetval;
    if (WSAStartup(MAKEWORD(2,2),&dwRetval)!=0)    //开启Socket
    {
    printf("WSAStartup failed. ");
    return 1;
    }

    void CGetHostNameDlg::OnGetHostNameIP()
    {
    char   szHostname[128];
    char   *ipName = new char[16];  //存放IP
    struct addrinfo   *result = NULL;     //指向addrinfo链表
    struct addrinfo   *ptr     = NULL;
    struct addrinfo    hints;       //标识获取的信息
    int      error;

    UpdateData();           //将控件的值赋值给成员变量
    gethostname(szHostname,128);
    m_strName = szHostname;
    struct sockaddr_in *sockaddr_ipv4;

    // Setup the hints address info structure
    // which is passed to the getaddrinfo() function
    ZeroMemory(&hints,sizeof(hints));
    hints.ai_family = AF_INET;        //指示IP类型(若用AF_UNSPEC不能得到本地地址
    hints.ai_protocol = IPPROTO_UDP;     //指示协议类型
    hints.ai_socktype = SOCK_DGRAM;     //套接字类型

    error = getaddrinfo(szHostname,NULL,&hints,&result);
    if (error!=0)
    {
    printf("getaddrinfo failed with error: %d ", error);
    WSACleanup();
    exit(1);
    }

    for (ptr = result; ptr != NULL;ptr=ptr->ai_next)
    {
    sockaddr_ipv4 = (sockaddr_in *)ptr->ai_addr;
    }

    // m_strIP =inet_ntoa( sockaddr_ipv4->sin_addr);  //已经不用
    m_strIP = InetNtop(AF_INET, &sockaddr_ipv4->sin_addr ,(PWSTR)ipName,16);
    UpdateData(false);      //将成员变量的值赋值控件

    freeaddrinfo(result);       //Free a list of address information structures
    WSACleanup();        //调用WSACleanup(),将其从Windows Sockets的实现中注销,并且该实现释放为应用程序或DLL分配的任何资源.任何打开的并已建立连接的SOCK_STREAM类型套接口在调用WSACleanup()时会重置; 而已经由closesocket()关闭却仍有要发送的悬而未决数据的套接口则不会受影响- 该数据仍要发送.

    }

    struct sockaddr_in{  

    short sin_family;

    unsigned short sin_port;

    struct in_addr sin_addr;

    char sin_zero[8];  

    };  

    参数

    sin_family
    地址系列(必须是 AF_INET)。

    sin_port
    IP 端口。

    sin_addr
    IP 地址。

    sin_zero
    填充结构使其与 SOCKADDR 的大小一致。

    struct sockaddr {

    unsigned short sa_family;  

    char sa_data[14];

    };  

    struct sockaddr 和 sockaddr_in 可相互转换,sockaddr_ipv4 = (sockaddr_in *)ptr->ai_addr;因为结构体字节大小相同。

  • 相关阅读:
    Power BI 根据用户权限动态生成导航跳转目标
    Power BI Tooltips 增强功能
    Power BI refresh error “could not load file or assembly…provided impersonation level is invalid”
    SQL 错误代码 18456
    如何使用SQL Server Integration Services从多个Excel文件读取数据
    通过表格编辑器将现有表引入Power BI数据流
    Power BI 中动态增长的柱状图
    ambari2.7.3离线安装hdp3.1.0时,ambari-hdp-1.repo中baseurl无值
    ambari 安装 cannot download file mysql-connector-java from http://8080/resource/mysql-connector-java.jar
    洛谷P4180 [BJWC2010]严格次小生成树
  • 原文地址:https://www.cnblogs.com/yunqie/p/6103316.html
Copyright © 2011-2022 走看看