一、思路

  1、要想得到本地IP地址,可以通过本机名来查询,所以首先得得到本机名。

  2、牵涉到IP地址,首先想到牵涉到网络协议,因此得加载套接字协议,所以先使用WSAStartup函数完成对Winsock服务的初始化。

二、步骤

  

三、实现程序的模块化

  1、包含文件工作

#include <iostream.h>
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib") bool GetLocalAddr();

  2、网络协议初始化工作

WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD(,);
int initWSA = WSAStartup(wVersionRequested,&wsaData);

  3、通过主机名来获取本地连接的IP地址

  •   hostent是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。
if ( == initWSA)
{
cout << "初始化完成!" << endl; // 获取主机名
char hostName[];
int iRet = gethostname(hostName,sizeof(hostName));
if (iRet != )
{
cout << "获取主机名失败!" << endl;
return false;
} // 通过主机名获取地址
//
hostent *hostInfo;
hostInfo = gethostbyname(hostName);
if (NULL == hostInfo)
{
cout << "通过主机名获取地址失败!" << endl;
return false;
} // 将网络地址转换成字符串,以便观看
char *IPAddr;
IPAddr = inet_ntoa(*(struct in_addr *)*hostInfo->h_addr_list);
cout << IPAddr << endl; // 卸载Winsock库,并释放所有资源
WSACleanup(); return true;
}
else
return false;

四、完整的程序

#include <iostream.h>
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib") bool GetLocalAddr(); int main(void)
{
GetLocalAddr();
return ;
} bool GetLocalAddr()
{
// 初始化Winsock库
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD(,);
int initWSA = WSAStartup(wVersionRequested,&wsaData); if ( == initWSA)
{
cout << "初始化完成!" << endl; // 获取主机名
char hostName[];
int iRet = gethostname(hostName,sizeof(hostName));
if (iRet != )
{
cout << "获取主机名失败!" << endl;
return false;
} // 通过主机名获取地址
hostent *hostInfo;
hostInfo = gethostbyname(hostName);
if (NULL == hostInfo)
{
cout << "通过主机名获取地址失败!" << endl;
return false;
} // 将网络地址转换成字符串,以便观看
char *IPAddr;
IPAddr = inet_ntoa(*(struct in_addr *)*hostInfo->h_addr_list);
cout << IPAddr << endl; // 卸载Winsock库,并释放所有资源
WSACleanup(); return true;
}
else
return false;
}

c、c++混编实现查询本地IP地址的更多相关文章

  1. 查询本地ip以及ip地址库查询

    四种方法查询本地ip from urllib2 import urlopen from json import load my_ip = urlopen('http://ip.42.pl/raw'). ...

  2. 获取本地IP地址信息

    2012-06-05    /// <summary>         /// 获取本地IP地址信息         /// </summary>         void G ...

  3. 获取Mac、CPUID、硬盘序列号、本地IP地址、外网IP地址OCX控件

    提供获取Mac.CPUID.硬盘序列号.本地IP地址.外网IP地址OCX控件 开发语言:vc++ 可应用与WEB程序开发应用 <HTML><HEAD><TITLE> ...

  4. python获取本地ip地址的方法

    #_*_coding:utf8_*_ #以下两种方法可以在ubuntu下或者windows下获得本地的IP地址 import socket # 方法一 localIP = socket.gethost ...

  5. C# — 动态获取本地IP地址及可用端口

    1.在VS中动态获取本地IP地址,代码如下: 2.获取本机的可用端口以及已使用的端口:

  6. Android 获得本地IP地址、外网IP地址、本设备网络状态信息、本地Mac地址

    本地内网IP和外网IP的区别: 根据我的经验一台电脑需要两个ip才可以上网,一个是本地的内网ip 一个是外网的ip 本地的ip 一般是192.168.1.2这种样子  只要在不同的路由器上可以重复 外 ...

  7. .net获取本地ip地址

    整理代码,.net获取本地ip地址,代码如下: string name = Dns.GetHostName(); IPHostEntry IpEntry = Dns.GetHostEntry(name ...

  8. 获取本地IP地址的vc代码

    作者:朱金灿 来源:http://blog.csdn.net/clever101 获取本地IP地址有两种做法.一种是使用gethostname函数,代码如下: bool CSocketComm::Ge ...

  9. 读取本地IP地址和子网页码

    #region 读取本地IP地址和子网页码 //读取本地IP地址和子网页码 NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterf ...

随机推荐

  1. 2D游戏编程1--windows编程模型

    一.创建一个windows程序步骤 1.创建一个windows类 2.创建一个事件处理程序 3.注册windows类 4.用之前创建的windows类创建一个窗口 5.创建一个主事件循环   二.存储 ...

  2. EJB (not bound)

    问题: 在代码实在找不到错误的情况下,仍然报:XXXX not bound 问题产生过程: 通过下图方式创建的项目:EJBTest2_1 勾选下面两项,即可生成:EJBTest2_1EJB 和 EJB ...

  3. hug and Compression Resistance

    Hugging => content does not want to grow Compression Resistance => content does not want to sh ...

  4. 探讨Web组件化的实现

    CMS组件化,简单架构示意图: Web组件使用WebPage+WebAPI的好处: Ø  组件复用(组件条件管理页面复用+获取组件数据API复用). Ø  组件是分布式的第三方应用,本身高内聚.组件之 ...

  5. Linux下l2tp客户端xl2tpd的安装配置

    1.下载xl2tp http://pkgs.org/search/?query=xl2tp&type=smart选择相应的版本进行下载 2.安装xl2tp和ppp yum install xl ...

  6. 从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈

    下面通过分别用C和C++来实现一个链栈(链表实现),从中体会数据封装抽象的思想: C语言实现:  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  7. wordpress主题制作常用基本的模板及说明

    style.css : CSS(样式表)文件,一般包括主题声明和通用css样式代码 index.php : 主页模板,一般用来做网站的首页 header.php : Header模板,一般是所有页面的 ...

  8. 四种可变交流swap方法

    1.void swap(int &x, int &y){ int temp=x; x=y; y=temp; } 2.void swap(int &x, int &y){ ...

  9. linux 0.11 源码学习+ IO模型

    http://www.cnblogs.com/Fredric-2013/category/696688.html

  10. Java基础知识强化之集合框架笔记63:Map集合之HashMap嵌套ArrayList

    1. ArrayList集合嵌套HashMap集合并遍历. 需求:假设ArrayList集合的元素是HashMap.有3个.每一个HashMap集合的键和值都是字符串.元素我已经完成,请遍历. 结果: ...