MFC socket 使用GetAddrInfo 相关代码 client端

  WSADATA wsa;
 char* msg;
 DWORD dwNum;
 if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
 {
  return;
 }
 struct addrinfo hints, *res;
 sockaddr_in sin;
 memset(&hints, 0, sizeof(struct addrinfo));
 hints.ai_family = AF_INET;
 hints.ai_socktype = SOCK_STREAM;
 char port_string[20] = {0};
 sprintf(port_string, "%d", port);
 int addrinfo = getaddrinfo(hostname, port_string, &hints, &res);
 if (addrinfo !=0 )
 {
  return ;
 }
 SOCKET Client_Sock = socket(res->ai_family, res->ai_socktype, 0);
 if (Client_Sock <= 0)
 {
  freeaddrinfo(res);
  int sock_error = GetLastError();
 }

 int ret = connect(Client_Sock,res->ai_addr, res->ai_addrlen);
 if(ret == -1)
 {
  freeaddrinfo(res);
  closesocket(Client_Sock);
  WSACleanup();
  return NULL;
 }
 freeaddrinfo(res);  //记得释放
 
 //......
 
 int recv_num = recv(Client_Sock,recv_str,sizeof(recv_str),0 );
 if(recv_num <= 0)
 {
  closesocket(Client_Sock);
  WSACleanup();
  return;
 }
 //.......
 //.....
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`socket.getaddrinfo()` 函数用于获取指定主机名、口号、协议类型(IPv4、IPv6)的网络地址(IP 地址和口号)。函数原型如下: ```python socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0) ``` 参数说明: - `host`:要获取网络地址的主机名。可以是主机名(如 www.example.com)或 IP 地址(如 192.168.0.1)。 - `port`:要获取网络地址的口号。可以是整数(如 80)或字符串(如 "http")。 - `family`:网络地址族。默认为 0,表示同时获取 IPv4 和 IPv6 地址。可以指定为 `socket.AF_INET`(获取 IPv4 地址)或 `socket.AF_INET6`(获取 IPv6 地址)。 - `type`:套接字类型。默认为 0,表示无限制。可以指定为 `socket.SOCK_STREAM`(流式套接字)或 `socket.SOCK_DGRAM`(数据报套接字)。 - `proto`:协议类型。默认为 0,表示无限制。可以指定为 `socket.IPPROTO_TCP`(TCP 协议)或 `socket.IPPROTO_UDP`(UDP 协议)。 - `flags`:可选标志。默认为 0,表示无标志。 函数返回值是一个列表,每个元素是一个 5 元组: ```python (family, type, proto, canonname, sockaddr) ``` 其中: - `family`:地址族(IPv4 或 IPv6)。 - `type`:套接字类型(流式套接字或数据报套接字)。 - `proto`:协议类型(TCP 或 UDP)。 - `canonname`:规范主机名。 - `sockaddr`:网络地址(IP 地址和口号)。 示例代码: ```python import socket # 获取 www.example.com 的 IPv4 地址和口号 result = socket.getaddrinfo("www.example.com", 80, family=socket.AF_INET, type=socket.SOCK_STREAM) for item in result: print(item) ``` 输出结果: ``` (2, 1, 6, '', ('93.184.216.34', 80)) ``` 可以看到,函数返回了一个 5 元组,其中第 5 个元素是一个二元组,表示 IPv4 地址和口号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值