拼吾爱程序人生其他编程C & C++ 如何用C++编程获得某台机器的IP地址

1  /  1  页   1 跳转 查看:526

如何用C++编程获得某台机器的IP地址

如何用C++编程获得某台机器的IP地址

对于这个古老的问题,VC知识库的精华区以及以往的在线杂志中都有详尽不一的描述。本文提供的方法是一个比较完整的解决方案,并附有详细的实现细节。希望大家对这个问题有彻底的认识。其实,如果你熟悉 Windows 的Sockets API,并了解一些底层的Winsock知识。那么要获得某台机器的IP地址并不是什么难事。一台机器可以装多块网卡,因此它就可能有多个IP地址。目前很多发烧友的PC机都装有多块网卡。其中一块网卡与调制解调器(MODEM)或者ADSL适配器相连,另一块与家里的局域网(LAN)相连。对于有宽带连接条件的家庭,这更是一种典型的配置。任何事情,一旦你知道了解决的方法,一切都会变得如此简单。下面是本文提供的一个简单的控制台程序(程序名为getip1),其功能就是显示本机的IP地址。如图一所示:


 附件: 您所在的用户组无法下载或查看附件

图一 getip1的运行画面


  下面是 getip1 程序的代码,很简单:

Code


(文/Northtibet  出处/CSDN)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C & C++] 的这些文章也感兴趣:

C/C++学习参考资料
C++中建立对象间消息连接的系统方法
C/C++中数组和指针类型的关系
利用C++实现哈夫曼算法
C#轻松解决世纪迷题
明确C++风格的类型转换的用法
C语言中的面向对象(2)-C语言的多态实现
C语言实现MATLAB 6.5中M文件的方法
C++数据结构学习:在链表中链入对象
C语言程序设计基础之枚举与位运算
 

回复: 如何用C++编程获得某台机器的IP地址

要使用Winsock,首先必须调用WSAStartup,最后结束时不要忘了调用WSACleanup。要获取IP地址,首先必须得到机器的主机名(host name),调用gethostname就可以实现,有了主机名,接下来调用gethostbyname来获取包括IP地址在内的更多的主机信息。gethostbyname返回一个指向hostent数据结构的指针,这个结构在<winsock.h>文件中是这样定义的:

Code


这是个典型的底层APIs使用的数据结构,很多人都不是很熟悉它。实际上,hostent是一个变长的数据结构,h_name是主机名,在例子程序中的值为 "zxn.hangwire.sdb"。没有别名(h_aliases)。h_addrtype是地址类型(或者也叫地址家族),在例子程序中的值为2(AF_INET = internet,其它内容参见winsock.h)。h_length是每一个地址的长度,以字节为单位。因为IP地址的长度是4个字节,所以在例子程序中的值为4,h_addr_list是地址数组的开始点,它们一个接着一个存放,结尾是一个null。每一个x.y.z.w数字占一个字节。为了将IP地址格式化为x.y.z.w的形式,必须将地址数组先拷贝到一个叫sockaddr的数据结构中,然后调用一个特殊的函数inet_ntoa。 图二是hostent 结构在内存中存放示意图:


 附件: 您所在的用户组无法下载或查看附件

图二 hostent 结构在内存中的存放示意图


  相信以上的解释再辅以阅读代码,你以后不再会对hostent结构感到陌生。
 
1  /  1  页   1 跳转

快速回复帖子

标题
禁用 URL 识别
禁用表情
禁用 Discuz!NT 代码
使用个人签名
  [完成后可按 Ctrl+Enter 无刷新发布]  

版权所有 拼吾爱程序人生 

Powered by Discuz!NT 2.1.202   Copyright © 2001-2008 Comsenz Inc. 鄂ICP备07500843号
返顶部