最近写个程序需要获取本机用于连接的IP地址,经过很多的尝试后,最终使用的方法如下:

  1. 使用cmd命令    netstat  | findstr “192.168.6.66:3333” > D:\\localAddress.txt

    其中“192.168.6.66:3333”是我的程序连接的服务器的ip地址,运行netstat命令后,找到其中包含了“192.168.6.66:3333”的那一行,并将结果输出到 localAddress.txt 中,localAddress.txt中的结果可能如下图所示

      

  2.读取 localAddress.txt 中的内容,并解析出本机用于连接的ip地址为 192.168.4.45

  • 我是使用CreateProcess函数运行cmd命令,可以避免出现cmd命令窗口,也能等待cmd命令运行结束再往下运行。

  代码如下:

      std::string path =  "D:\\localAddress.txt";
//创建用于保存本机IP地址的localAddress.txt
std::ofstream fout(path);
if (fout) // 如果创建成功
{
fout << "" << std::endl;
fout.close(); // 执行完操作后关闭文件句柄 std::string ptr;
std::string output;
ptr="cmd /c netstat | findstr \"192.168.6.66:3333 > ";
ptr += path; STARTUPINFO si;
PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
//隐藏掉可能出现的cmd命令窗口
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
ZeroMemory(&pi, sizeof(pi)); // Start the child process.
if (CreateProcess(NULL, // No module name (use command line)
(LPSTR)(LPCTSTR)ptr.c_str(), // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{ // Wait until child process exits.
WaitForSingleObject(pi.hProcess, INFINITE); std::fstream ffileTemp(path); //作为读取文件打开
if (ffileTemp)
{
char buffer[];
while (!ffileTemp.eof())
{
ffileTemp.getline(buffer, , '\n');
std::string temp = buffer;
if (temp.find("ESTABLISHED") != std::string::npos)
{
output += temp;
break;
}
}
ffileTemp.close();
} if (output.length() > )
{
output.erase(, output.find_first_not_of(" "));
std::string localip, temp;
temp = output.substr(output.find_first_of(" "));
temp.erase(, temp.find_first_not_of(" "));
temp = temp.substr(, temp.find_first_of(" ")); localip = temp.substr(, temp.find_first_of(":")); //获得ip地址 }
}
}

C++获取本机用于连接的IP地址的更多相关文章

  1. 【liunx】使用xshell连接虚拟机上的CentOS 7,使用xhell连接本地虚拟机上的Ubuntu, 获取本地虚拟机中CentOS 7的IP地址,获取本地虚拟机中Ubuntu 的IP地址,Ubuntu开启22端口

    注意,如果想用xshell去连接本地虚拟机中的linux系统,需要本地虚拟机中的系统是启动的才能连接!!!!! ============================================ ...

  2. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  3. Java 获取当前项目所在服务器的 IP 地址

    java中获取当前服务器地址主要使用到InetAddress这个类 public static void main(String[] args) { try { //用 getLocalHost() ...

  4. javascript获取当前用户访问的宽带IP地址

    javascript获取当前用户访问的宽带IP地址 <script src="http://pv.sohu.com/cityjson?ie=utf-8"></sc ...

  5. 如何在SqlServer中获取前端连接的IP地址,计算机名等信息

    在一些需求中,可能我们需要知道连接到SqlServer的前端程序的一些系统信息,比如前端连接的计算机名称,IP地址,什么时候开始请求连接,什么时候结束连接等信息. 如果你对SqlServer的系统函数 ...

  6. C# 获取本机CPU序列号,MAC地址,硬盘ID,本机IP地址,计算机名,物理内存,PC类型

    首先引入服务 然后 调用 本文转载自http://blog.sina.com.cn/s/blog_7eeb43210101hf7f.html public class Computer { publi ...

  7. 获取本机正在使用的ipv4地址(访问互联网的IP)

    [转]原文地址:http://www.cnblogs.com/lijianda/p/6604651.html 1.一个电脑有多个网卡,有线的.无线的.还有vmare虚拟的两个网卡.2.就算只有一个网卡 ...

  8. C#获取本机的外网IP

    /// <summary> /// 功能:获取本地的外网IP地址 /// 作者:黄海 /// 时间:2016-07-22 /// </summary> /// <retu ...

  9. win7 64 位操作系统,进程System,PID为4,扫描连接局域网ip地址的139和445端口

    偶然发现电脑的System进程不间断扫描连接局域网内的其它IP对应的445和139端口,这是个问题. 上网搜索,立即关闭139端口的监听. 方法如下: 本地连接属性-TCP/IP属性-高级-WINS选 ...

随机推荐

  1. Image2Caption

    定义 图像标注或语言生成图像问题把计算机视觉与自然语言处理联系在了一起,是广义的人工智能领域的一大难题.通常涉及到特征提取(用cnn提取出图像内部不为人类感知的向量特征)和语言模型建立.为图像提取文字 ...

  2. 11_传智播客iOS视频教程_NS前缀和@符号

    NS前缀的有NSLog和NSString Cocoa就是用来开发带界面的应用程序. Foundation框架之中的类.函数绝大多数都是从NextStep来的.看到NS前缀就知道这个类是从哪里来的.是很 ...

  3. 修复win7的启动引导

    自己的电脑上本身是win7,为了试验openstack,决定装个ubuntu server,过程也不太懂,一直卡在分区不敢贸然前进,反复了几次,终于导致我进不了原来的win7,原因不明! 当时就慌了, ...

  4. CodeForces 730A Toda 2 (模拟)

    题意:给定一个序列,现在你每次至多给5个人的权值减小1,最少2个人,最小是0,使得剩下的所有权值都相等且尽量大. 析:用multiset来模拟,每次取权值最大的三个或者两个,直到最后相等.我开始没有这 ...

  5. bzoj 3052: [wc2013]糖果公园【树上带修改莫队】

    参考:http://blog.csdn.net/lych_cys/article/details/50845832 把树变成dfs括号序的形式,注意这个是不包含lca的(除非lca是两点中的一个) 然 ...

  6. P5068 [Ynoi2015]我回来了

    传送门 解锁成就:ynoi的题目都做到过原题 因为\(n\)很小,我们可以用\(sss[u][i]\)表示到点\(u\)的距离不超过\(i\)的点的集合,这个可以用bitset存,然后先一遍bfs,再 ...

  7. Ocelot(七)- 入门

    入门 Ocelot仅适用于.NET Core,目前是为netstandard2.0构建的.如果Ocelot适合您,那么此文档可能会有用. .NET 安装NuGet包 使用nuget安装Ocelot及其 ...

  8. layui table 详细讲解

     layui.use('table', function () {             var table = layui.table;             /*第一种原始写法*/       ...

  9. Qt之界面(自定义标题栏、无边框、可移动、缩放)

    效果 自定义标题栏 titleBar.h #ifndef TITLEBAR_H #define TITLEBAR_H #include <QLabel> #include <QPus ...

  10. 贪心 HDOJ 5385 The Path

    题目传送门 /* 题意:给一张图和一些有向边,问如何给边赋值使得d1 < d2 < .. < dx > ,,,< ddn 贪心:左边从2开始,右边从n开始,每次选择未标记 ...