• getaddrinfo()


    //getaddrinfo()函数原型
    WINSOCK_API_LINKAGE
    INT
    WSAAPI
    getaddrinfo(
        _In_opt_        PCSTR               pNodeName,    //节点名可以是主机名,也可以是数字地址。(IPV4的10进点分,或是IPV6的16进制)
        _In_opt_        PCSTR               pServiceName, //包含十进制数的端口号或服务名如(ftp,http)
        _In_opt_        const ADDRINFOA *   pHints,       //是一个空指针或指向addrinfo结构的指针,由调用者填写关于它所想返回的信息类型的线索
        _Outptr_        PADDRINFOA *        ppResult      //存放返回addrinfo结构链表的指针
        );
    //调用该函数会获得一个addrinfo结构的列表,调用的返回值是addrinfo的结构(列表)指针。
    
    
    //addrinfo结构原型
    typedef struct addrinfo {     int                 ai_flags;       // AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST     int                 ai_family;      // PF_xxx ,AF_INET,AF_INET6,AF_UNSPEC     int                 ai_socktype;    // SOCK_xxx ,SOCK_STREAM,SOCK_DGRAM     int                 ai_protocol;    // 0 or IPPROTO_xxx for IPv4 and IPv6 ,IPPROTO_IP, IPPROTO_IPV4, IPPROTO_IPV6 etc.     size_t              ai_addrlen;     // Length of ai_addr     char *              ai_canonname;   // Canonical name for nodename     _Field_size_bytes_(ai_addrlen) struct sockaddr *   ai_addr;        // Binary address     struct addrinfo *   ai_next;        // Next structure in linked list } ADDRINFOA, *PADDRINFOA;

     由getaddrinfo返回的所有存储空间都是动态获取的,这些存储空间必须通过调用freeaddrinfo返回给系统。

    //freeaddrinfo()函数原型
    WINSOCK_API_LINKAGE VOID WSAAPI freeaddrinfo( _In_opt_ PADDRINFOA pAddrInfo );
    //getaddrinfo()函数示例

     char host_name[20] = "";
     gethostname(host_name, 20);

     ADDRINFOA hint, *pAddrinfo;
     memset(&hint, 0, sizeof(ADDRINFOA));
     hint.ai_family = AF_INET;
     hint.ai_socktype = SOCK_STREAM;
     hint.ai_protocol = IPPROTO_TCP;
     hint.ai_flags = AI_PASSIVE;
     int ret = getaddrinfo(host_name, "3050", &hint, &pAddrinfo);
     if (ret!=0)
     {
      AfxMessageBox(_T("获得主机IP失败"));
      return;
     }

     SOCKET socket_server = socket(pAddrinfo->ai_family, pAddrinfo->ai_socktype, pAddrinfo->ai_protocol);
     bind(socket_server, pAddrinfo->ai_addr, pAddrinfo->ai_addrlen);

  • 相关阅读:
    JavaScript Patterns 5.7 Object Constants
    JavaScript Patterns 5.6 Static Members
    JavaScript Patterns 5.5 Sandbox Pattern
    JavaScript Patterns 5.4 Module Pattern
    JavaScript Patterns 5.3 Private Properties and Methods
    JavaScript Patterns 5.2 Declaring Dependencies
    JavaScript Patterns 5.1 Namespace Pattern
    JavaScript Patterns 4.10 Curry
    【Android】如何快速构建Android Demo
    【Android】如何实现ButterKnife
  • 原文地址:https://www.cnblogs.com/zhoudingcocng/p/6483430.html
Copyright © 2020-2023  润新知