WSADATA dwRetval;
if (WSAStartup(MAKEWORD(2,2),&dwRetval)!=0)    //开启Socket
{
printf("WSAStartup failed.\n");
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\n", 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;因为结构体字节大小相同。

Getaddrinfo()笔记的更多相关文章

  1. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  2. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  3. Python Socket API 笔记

    将上节中的C#该成Python版的容易程度大大超出了我的意料之外.从来没有发现,仅仅用灰尘简单的几句话就实现了该程序的主要功能,可见python的简易和强大之处.这里先对SocketAPI 做一下总结 ...

  4. 转 网络编程学习笔记一:Socket编程

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  5. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  6. 布客·ApacheCN 翻译/校对/笔记整理活动进度公告 2020.1

    注意 请贡献者查看参与方式,然后直接在 ISSUE 中认领. 翻译/校对三个文档就可以申请当负责人,我们会把你拉进合伙人群.翻译/校对五个文档的贡献者,可以申请实习证明. 请私聊片刻(52981514 ...

  7. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

随机推荐

  1. 放弃OT了,找了个新框架ThinkCMF

    放弃OT了,找了个新框架ThinkCMF,感觉还不错,用用看. 选择OT的原因: 1. OT基于ThinkPHP 2. OT对ThinkPHP进行了封装,使得开发应用更加简单 3. yershop应用 ...

  2. quickstart.sh

    #!/bin/bashjava_pid=`ps -ef | grep java | grep 'com.kzhong.huamu.sisyphus.QuickStartServer' | awk '{ ...

  3. Java资源大全

    古董级工具 这些工具伴随着Java一起出现,在各自辉煌之后还在一直使用. Apache Ant:基于XML的构建管理工具. cglib:字节码生成库. GlassFish:应用服务器,由Oracle赞 ...

  4. jQuery Portamento 滑动定位

    版本: jQuery v1.3.2+ jQuery Portamento v1.1.1 注意事项: 在不支持position:fixed的浏览器里效果不是很好(例如 IE6.iOS4),可以在参数中设 ...

  5. 很实用的baguetteBox.js 图片弹出层

    lightbox JS插件--baguetteBox.js,它是用纯Javascript创建的图像展示效果,拥有图像放大缩小并带有相应的CSS3过度,并能在触摸屏等设备上完美展示. baguetteB ...

  6. 一款经典的jQuery kxbdMarquee 无缝滚动插件

    <marquee> 曾是 IE 下独有的一个走马灯效果的标签,其他浏览器并不兼容,于是出现了使用 JavaScript 来模拟该效果的插件. 版本: jQuery v1.3.2+ 在线实例 ...

  7. 根据网址把图片下载到服务器C#代码

    根据网址把图片下载到服务器C#代码 ASPX页面代码: <%@ Page Language="C#" AutoEventWireup="true" Cod ...

  8. JavaScript学习笔记-用于模式匹配的String方法

    用于模式匹配的String方法:   String支持4种使用正则表达式的方法:           seach()用于检索,参数是一个正则表达式,返回第一个与之匹配的子串的位置,找不到则返回-1,如 ...

  9. js删除数组中的'NaN'

    js中的NaN不和任何值相等,包括自身. 所以可以使用x!=x来判断x是否是NaN,当且仅当x为NaN时,表达式的结果为true. NaN != NaN //true 可以依此删除数组中的'NaN'. ...

  10. Provider Hosted App中使用JOM问题

    在使用SharePoint 2013的JOM时,出现以下问题: ReferenceError: SP is not defined 经反复试验和搜索,得出以下两种方式: 一.直接引用JS文件,引用顺序 ...