一、思路

  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. mao/reduce实现求平均值

    import java.io.*; import java.util.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io. ...

  2. curl伪造ip

    //随机IP function Rand_IP(){ $ip2id= round(rand(, ) / ); //第一种方法,直接生成 $ip3id= round(rand(, ) / ); $ip4 ...

  3. poj 3468 A Simple Problem with Integers【线段树区间修改】

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 79137   ...

  4. Power of Cryptography

    //只用一行核心代码就可以过的天坑题目............= = 题目: Description Current work in cryptography involves (among othe ...

  5. Yii2 验证码

    没有用默认的layout  验证码点击不会改变 下面是静态页面代码 <div class="col-sm-12 login"> <div class=" ...

  6. Linux无处不在

    Linux is Everywhere从政府.教育.商业和非盈利组织.科研机构几个方面展示了现在都有哪些地方用了Linux.

  7. Android Dev

    [2015-04-22 13:30:37 - branch_1.5.1_WelcomeActivity] R.java was modified manually! Reverting to gene ...

  8. adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决

    adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决 在ubuntu14.04下,搭建Android开发环境,下载官方的adt- ...

  9. careercup-链表 2.3

    2.3 实现一个算法,删除单向链表中间的某个结点,假设你只能访问该结点.(即你不知道头结点) 这个问题的关键是你只有一个指向要删除结点的指针,如果直接删除它,这条链表就断了. 但你又没办法得到该结点之 ...

  10. LabView 快捷键

    对象调整和移动Shift-click 选择多个对象,在现有选择的基础上添加对象(方向键) 以一个像素为单位移动所选对象Shift- 以几个像素为单位移动所选对象Shift-click (拖动对象) 在 ...