项目需要从域名解析地址,但是编译的时候提示gethostbyname error,百度了一下,这才发现,原来用了N年的gethostbyname 已经是obsolete 的函数了,都标记成DEPRECATED 了,无论是windows 下还是linux 下都建议使用getaddrinfo 来替代它。很好的总结经验:

gethostbyname函数的原型如下:

[cpp]struct hostent* FAR gethostbyname(

_In_ const char *name

);[/cpp]

之前使用gethostbyname 很简单,类似这样:

[cpp]struct hostent *remoteHost;

struct in_addr addr;

if ( ( remoteHost = gethostbyname( hostname ) ) == NULL ){

xxxx;

}

else{

if (remoteHost->h_addrtype == AF_INET)

{

while (remoteHost->h_addr_list[i] != 0) {

addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];

printf("\tIP Address #%d: %s\n", i, inet_ntoa(addr));

}

}

}[/cpp]

现在得用getaddrinfo,其原型如下:

[cpp]int WSAAPI getaddrinfo(

_In_opt_ PCSTR pNodeName,

_In_opt_ PCSTR pServiceName,

_In_opt_ const ADDRINFOA *pHints,

_Out_ PADDRINFOA *ppResult

);[/cpp]

得这么用:

[cpp]struct addrinfo *result = NULL;

struct addrinfo *ptr = NULL;

struct addrinfo hints;

ZeroMemory( &hints, sizeof(hints) );

hints.ai_family = AF_UNSPEC;

hints.ai_socktype = SOCK_STREAM;

hints.ai_protocol = IPPROTO_TCP;

dwRetval = getaddrinfo(hostname, 0, &hints, &result);

if ( dwRetval != 0 ) {

xxxx;

}

else{

for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {

printf("getaddrinfo response %d\n", i++);

printf("\tFlags: 0x%x\n", ptr->ai_flags);

printf("\tFamily: ");

switch (ptr->ai_family) {

case AF_UNSPEC:

printf("Unspecified\n");

break;

case AF_INET:

printf("AF_INET (IPv4)\n");

sockaddr_ipv4 = (struct sockaddr_in *) ptr->ai_addr;

printf("\tIPv4 address %s\n",

inet_ntoa(sockaddr_ipv4->sin_addr) );

break;

case AF_INET6:

printf("AF_INET6 (IPv6)\n");

// the InetNtop function is available on Windows Vista and later

// sockaddr_ipv6 = (struct sockaddr_in6 *) ptr->ai_addr;

// printf("\tIPv6 address %s\n",

// InetNtop(AF_INET6, &sockaddr_ipv6->sin6_addr, ipstringbuffer, 46) );

// We use WSAAddressToString since it is supported on Windows XP and later

sockaddr_ip = (LPSOCKADDR) ptr->ai_addr;

// The buffer length is changed by each call to WSAAddresstoString

// So we need to set it for each iteration through the loop for safety

ipbufferlength = 46;

iRetval = WSAAddressToString(sockaddr_ip, (DWORD) ptr->ai_addrlen, NULL,

ipstringbuffer, &ipbufferlength );

if (iRetval)

printf("WSAAddressToString failed with %u\n", WSAGetLastError() );

else

printf("\tIPv6 address %s\n", ipstringbuffer);

break;

case AF_NETBIOS:

printf("AF_NETBIOS (NetBIOS)\n");

break;

default:

printf("Other %ld\n", ptr->ai_family);

break;

}

}[/cpp]

转载自:mosir.org

c语言gethostbyname,gethostbyname替代getaddrinfo | C/C++程序员之家相关推荐

  1. 程序员语言也有鄙视链!某美团程序员爆料:筛选简历时,用go语言的基本不看!网友:当韭菜还当出优越感了!...

    程序员使用的语言有鄙视链吗?有人说有,有人说没有.一个美团员工发帖说,筛选简历时用go语言的基本不看.短短一句话,把对go语言的鄙视体现得淋漓尽致,难道go语言真的不如其他语言? 和他一样想法的前阿里 ...

  2. 加法运算替代 牛客网 程序员面试金典 C++ Python

    加法运算替代 牛客网 程序员面试金典 题目描述 请编写一个方法,实现整数的乘法.减法和除法运算(这里的除指整除).只允许使用加号. 给定两个正整数int a,int b,同时给定一个int type代 ...

  3. 你认为已经过时的C语言,是如何影响500万程序员的?...

    看招聘职位要c语言的占比真不多了,是否c语言真得落伍了? 看一下许多招聘平台有关于找纯粹的c语言开发的占比确实没有很多,都被Java,php,python等等語言刷屏.这对于入门正在学习c语言的小白真 ...

  4. c语言查看cpu温度代码_很多程序员都不知道,C语言中还有“快类型”和“小类型”...

    虽说C语言是一门很成熟的编程语言,但是近些年来也是有所发展的,从早期的C89到后来的C99.C11等新标准,C语言逐步增加了许多好用的功能,例如新标准头文件"stdint.h"的添 ...

  5. python语言为何不受待见_程序员为什么讨厌这些语言

    全球著名的 IT 网站 Stack Overflow 根据数百万开发者项目标签的使用频率,发布了一份编程语言的调查报告,试图找出最不受欢迎的编程语言.没想到开发者最想规避的编程语言中,PHP.Obje ...

  6. C语言入门非常简单!神级程序员五分钟带你入门!这就是学习效率

    很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编有个建议,可以加小编弄的一个 ...

  7. C/C++语言能做什么?C/C++程序员在做什么?企业需要什么样的C/C++程序员

    数据显示企业的JAVA和C++职位比例约6:4,培训机构的主流课程是JAVA和Python等,进一步导致了C/C++程序员的缺乏. 培训机构不愿意开设C/C++课程,C/C++语言的教学对老师的能力要 ...

  8. 任何字符串都可以作为c语言的标识符,2013年软考程序员模拟试题及答案解析一...

    2013年软考网络工程师.IT项目管理师考前培训可进入 一.选择题 1.二进制语言是属于( ) A.面向机器语言 B.面向问题语言 C.面向过程语言 D.面向汇编语言 [解析]人们研制了许许多多计算机 ...

  9. c语言编程知识分享uc头条,资深程序员分享的C语言编程中的一些误用及知识总结...

    我们是不是在写程序的时候错误很多,就算编译通过了也达不到我们预期的结果.之后自己还找不到错在哪儿.我觉得语言之所以能称之为语言,首先它肯定是一种工具.一种相互交流.相互通信.相互传达之间意图的工具.作 ...

最新文章

  1. 编程人员需知的Windows平台编程的环境设置技巧
  2. Beta冲刺提交-星期四
  3. Winform中设置ZedGraph鼠标滚轮缩放的灵敏度以及设置滚轮缩放的方式(鼠标焦点为中心还是图形中心点)
  4. javascript极简时间扩展类
  5. 文本分析:吉利不裁员不降薪背后的真相是什么
  6. linux作业(第四章练习题)
  7. EcStore中的App是什么东西?
  8. Tomcat配置优化
  9. java实用教程——组件及事件处理——ItemEvent事件(设置字体类型)
  10. 分享自己作为一个程序员的找工作经历
  11. 【拨云见日】全面云化时代,如何选择适合自己的“云”?
  12. python的底层实现_Python底层封装实现方法详解
  13. 哈佛大学单细胞课程|笔记汇总 (六)
  14. 第一个Sprint冲刺成果
  15. webService调用模式比较
  16. sci translate好用吗_收藏!SCI论文Introduction 和Conclusion的写作建议
  17. 联想万全服务器告警信息在哪里看,华为网络设备查看告警信息
  18. 阿里巴巴字体库的下载以及三种用法
  19. 打造黑苹果(六)设置无线网卡上网
  20. Spring AOP 学习总结

热门文章

  1. 解决nginx重启出现没有nginx.pid文件的报错提示
  2. String截取指定内容
  3. 第四章 计算机软件安装与调试
  4. AOP的实现原理 —— 静态代理 和 动态代理( Spring AOP)
  5. php转pdf首行缩进,css text-indent属性如何实现首行缩进?【详解】
  6. Chrome暂停更新?新冠疫情让Google Chrome的安全性打上了问号!
  7. 北京交管12123学法减分之当前部门业务尚未开通
  8. 高级软件工程必做作业2.视频剪辑软件调研——抖音、快手、vue
  9. sln项目移植到Linux,Visual Studio项目迁移到Linux系统
  10. python kfold交叉验证_kfold交叉验证python