MFC获取本机所有IP、局域网所有IP、本机和局域网可连接IP

获取本机所有IP地址

// 获取本机所有IP地址
int CMachine::GetLocalIPs(std::vector<CString>& vIPValue)
{//返回IP数量, -1表示获取失败vIPValue.clear();int IpNum = 0;//1.初始化wsa  WSADATA wsaData;int ret = WSAStartup(MAKEWORD(2, 2), &wsaData);if (ret != 0){return -1;}//2.获取主机名  char hostname[256];ret = gethostname(hostname, sizeof(hostname));if (ret == SOCKET_ERROR){return -1;}//3.获取主机ip  HOSTENT* host = gethostbyname(hostname);if (host == NULL){return -1;}//4.逐个转化为char*并拷贝返回  IpNum = host->h_length;for (int i = 0; i < IpNum; i++){char ip[30];CString strtmp;in_addr* addr = (in_addr*)*host->h_addr_list;strcpy(ip, inet_ntoa(addr[i]));strtmp = ip;vIPValue.push_back(strtmp);}WSACleanup();return IpNum;
}

获取局域网内所有IP地址

// 获取局域网内所有IP地址
int CMachine::GetLanIPs(std::vector<CString>& vIPValue)
{//返回IP数量, -1表示获取失败vIPValue.clear();int IpNum = 0;//1.初始化wsa  WSADATA wsaData;int ret = WSAStartup(MAKEWORD(1, 1), &wsaData);if (ret != 0){return -1;}//2.获取主机名  char hostname[256];gethostname(hostname, sizeof(hostname));CString strHostName;strHostName = hostname;//3.搜索局域网内主机DWORD dwScope = RESOURCE_CONTEXT;NETRESOURCE *NetResource = NULL;HANDLE hEnum;WNetOpenEnum(dwScope, NULL, NULL, NULL, &hEnum);if (hEnum){DWORD Count = 0xFFFFFFFF;DWORD BufferSize = 2048;LPVOID Buffer = new char[2048];WNetEnumResource(hEnum, &Count, Buffer, &BufferSize);NetResource = (NETRESOURCE *)Buffer;for (unsigned int i=0; i<Count; i++, NetResource++){if (NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY){if (NetResource->lpRemoteName){CString strFullName = NetResource->lpRemoteName;if (0 == strFullName.Left(2).Compare(_T("\\\\"))) strFullName = strFullName.Right(strFullName.GetLength() - 2);if (strFullName == strHostName){continue;}const char* cchostname = CString2ConstChar(strFullName);HOSTENT* host = gethostbyname(cchostname);delete[] cchostname;if (host != NULL){CString strtmp;struct in_addr *ptr;ptr = (struct in_addr *)host->h_addr_list[0];int a = ptr->S_un.S_un_b.s_b1;int b = ptr->S_un.S_un_b.s_b2;int c = ptr->S_un.S_un_b.s_b3;int d = ptr->S_un.S_un_b.s_b4;strtmp.Format(_T("%d.%d.%d.%d"), a, b, c, d);vIPValue.push_back(strtmp);IpNum++;}}}}}WSACleanup();return IpNum;
}

搜索本地可连通IP

// 搜索本地可连通IP
int CMachine::SearchEnableIP()
{//返回值:0可连通IP成功写入配置文件 1网络不通 2连接redis服务器失败 3创建命令客户端失败 4订阅消息失败 5写配置文件失败//获取本机IPstd::vector<CString> IPValue;int IPNum = GetLocalIPs(IPValue);if (IPNum <= 0){CString strtmp = _T("127.0.0.1");IPValue.push_back(strtmp);IPNum = 1;}//测试网路络连接for (int i = 0; i < IPNum; i++){const char* ccIP = CString2ConstChar(IPValue.at(i));if (is_access_remote_host(ccIP) != 0){IPValue.erase(IPValue.begin() + i);IPNum = IPValue.size();}delete[] ccIP;}if (IPNum <= 0){return 1;//网络不通}//连接redis服务器for (int i = 0; i < IPNum; i++){disconnect_redis_server();const char* ccIP = CString2ConstChar(IPValue.at(i));if (!connect_redis_server(ccIP, 6379, 5)){IPValue.erase(IPValue.begin() + i);IPNum = IPValue.size();i--;}else{bool bConnected = false;get_master_dsp_connect_status(bConnected);if (!bConnected){IPValue.erase(IPValue.begin() + i);IPNum = IPValue.size();i--;}}delete[] ccIP;}if (IPNum <= 0){return 2;//连接redis服务器失败}//创建命令客户端for (int i = 0; i < IPNum; i++){const char* ccIP = CString2ConstChar(IPValue.at(i));if (!create_master_cmd_client(ccIP)){IPValue.erase(IPValue.begin() + i);IPNum = IPValue.size();i--;}delete[] ccIP;}if (IPNum <= 0){return 3;//创建命令客户端失败}//订阅消息for (int i = 0; i < IPNum; i++){const char* ccIP = CString2ConstChar(IPValue.at(i));if (!setup_master_subcriber(ccIP)){IPValue.erase(IPValue.begin() + i);IPNum = IPValue.size();i--;}delete[] ccIP;}if (IPNum <= 0){return 4;//订阅消息失败}notice_exit();destory_master_cmd_client();disconnect_redis_server();char buf[30] = "";if (!WritePrivateProfileString(_T("CutterServer"), _T("IP"), IPValue.at(0), m_ConfigPath)){return 5;}return 0;
}

搜索局域网内可连通IP

// 搜索局域网内可连通IP
int CMachine::SearchLanEnableIP()
{//返回值:0可连通IP成功写入配置文件 -1局域网内无其他计算机 1网络不通 2创建从机命令客户端失败 3写配置文件失败//获取本机IPstd::vector<CString> IPValue;int IPNum = GetLanIPs(IPValue);if (IPNum <= 0){return -1;}//测试网路络连接for (int i = 0; i < IPNum; i++){const char* ccIP = CString2ConstChar(IPValue.at(i));if (is_access_remote_host(ccIP) != 0){IPValue.erase(IPValue.begin() + i);IPNum = IPValue.size();}delete[] ccIP;}if (IPNum <= 0){return 1;//网络不通}//创建命令客户端for (int i = 0; i < IPNum; i++){const char* ccIP = CString2ConstChar(IPValue.at(i));if (!create_slave_cmd_client(ccIP)){IPValue.erase(IPValue.begin() + i);IPNum = IPValue.size();i--;}delete[] ccIP;}if (IPNum <= 0){return 2;//创建命令客户端失败}destory_slave_cmd_client();char buf[30] = "";if (!WritePrivateProfileString(_T("CutterServer"), _T("IP2"), IPValue.at(0), m_ConfigPath)){return 3;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86445.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】贪吃蛇小游戏

1. 所需知识 C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API... 2. Win32 API介绍 2.1 Win32 API windows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外&#xff0c;它同时也是一个很大的服务中心&#xff0c;调用这个服务中心的各种…

PostgreSQL 容器化分布式技术方案

&#x1f4cb; 目录 引言&#xff1a;为什么选择容器化PostgreSQLPostgreSQL容器化基础分布式架构设计高可用实现方案读写分离架构动态扩缩容策略生产环境实践总结与展望 引言&#xff1a;为什么选择容器化PostgreSQL 在数字化转型的浪潮中&#xff0c;数据库作为企业的"…

NV025NV033美光固态闪存NV038NV040

美光固态闪存技术突破与市场布局深度解析 一、技术突破&#xff1a;232层NAND闪存与高密度存储的革新 美光NV系列固态闪存的核心竞争力源于其232层NAND闪存技术&#xff0c;这一技术通过垂直堆叠工艺&#xff0c;将存储单元层层叠加&#xff0c;宛如在指甲盖面积内构建超过20…

Matplotlib 绘图库从入门到精通:Python 数据可视化全解析

引言 在数据科学的世界里&#xff0c;"一图胜千言" 这句话有着深刻的含义。数据可视化不仅是数据分析师展示成果的重要手段&#xff0c;更是数据科学家探索数据、发现规律的强大工具。Matplotlib 作为 Python 生态系统中最著名的数据可视化库&#xff0c;为我们提供…

北斗导航 | 基于CNN-LSTM-PSO算法的接收机自主完好性监测算法

接收机自主完好性监测 原理概述1. 算法架构2. 核心创新点3. 工作流程数学模型1. CNN特征提取2. LSTM时序建模3. PSO优化决策MATLAB完整代码算法优势性能对比应用场景扩展方向原理概述 1. 算法架构 #mermaid-svg-fITV6QrXL1fNYFwG {font-family:"trebuchet ms",verda…

【微信小程序】9、用户拒绝授权地理位置后再次请求授权

1、获取用户当前的地理位置 在本专栏的上一篇文章中讲了如何 获取用户当前的地理位置 首次请求 wx.getLocation API 后&#xff0c;会拉起用户授权界面 但这时用户可能会拒绝授权&#xff0c;当你再次请求 wx.getLocation API 后&#xff0c;没有任何效果。 2、打开设置 用…

嵌入式Linux驱动开发基础-1 hello驱动

1:APP打开的文件在内核中如何表示 1.1 APP 打开文件时&#xff0c;可以得到一个整数&#xff0c;这个整数被称为文件句柄。对于 APP 的每一个文件句柄&#xff0c;在内核里面都有一个“struct file ”与之对应 当我们使用 open 打开文件时&#xff0c;传入的 flags 、 mode…

目标跟踪存在问题以及解决方案

3D 跟踪 一、数据特性引发的跟踪挑战 1. 点云稀疏性与远距离特征缺失 问题表现&#xff1a; 激光雷达点云密度随距离平方衰减&#xff08;如 100 米外车辆点云数不足近距离的 1/10&#xff09;&#xff0c;导致远距离目标几何特征&#xff08;如车轮、车顶轮廓&#xff09;不…

JavaSE-JDK安装

目录 一.在官网下载安装包 二.安装JDK 三.检测JDK是否安装成功 四.配置系统环境变量 一.在官网下载安装包 Oracle官网https://www.oracle.com/cn/java/technologies/downloads/ 二.安装JDK 1.首先在C盘以为的其他盘中创建一个自己可以找到的存放JDK路径&#xff1a; 2.双击下…

使用docker搭建redis主从架构,一主2从

使用Docker搭建Redis主从架构&#xff08;一主两从&#xff09; Redis主从架构是提高系统可用性和读取性能的重要方案&#xff0c;通过Docker可以快速搭建该架构。下面将详细介绍搭建步骤。 架构设计 我们将搭建包含以下组件的架构&#xff1a; 1个主节点&#xff08;Maste…

机器学习3——参数估计之极大似然估计

参数估计 问题背景&#xff1a; P ( ω i ∣ x ) p ( x ∣ ω i ) P ( ω i ) p ( x ) p ( x ) ∑ j 1 c p ( x ∣ ω j ) P ( ω j ) \begin{aligned} & P\left(\omega_i \mid \mathbf{x}\right)\frac{p\left(\mathbf{x} \mid \omega_i\right) P\left(\omega_i\right)…

Spring AOP Pointcut 表达式的语法是怎样的?(execution(...) 是最常用的,还有哪些

Pointcut 表达式是 AOP 的核心&#xff0c;我将详细解析最常用的 execution 表达式&#xff0c;并介绍其他几种同样非常有用的表达式。 1. execution 指示符 (最常用&#xff0c;最强大) execution 用于匹配方法的执行&#xff08;Join Point&#xff09;。它的语法结构最为完…

基于 SpringBoot+Vue 的台球厅管理系统的设计与实现(毕业论文)

基于 SpringBootVue 的台球厅管理系统的设计与实现&#xff08;模板&#xff09;[三号宋体加粗&#xff0c;居中] 摘 要[首行缩进2字符&#xff0c;五号黑体加粗]&#xff1a;摘要内容[五号楷体]本文所提出的基于J2EE/EJB标准的电子化采购平台及其CRM组件综合解决方案&#xf…

运营医疗信息化建设的思路

医疗机构加强运营管理&#xff0c;必须依赖强有力的医院信息系统。信息化很重要&#xff0c;但不能为了信息化而信息化。运营信息化必须有明确的建设目标。 运营信息化建设的目标&#xff0c;包括几个方面&#xff1a; 1.实时反映业务&#xff1b; 2.体现内控思维&#xff1b…

6.24_JAVA_微服务day07_RabbitMQ高级

1、 RabbitListener(queuesToDeclare/*此处是固定写法&#xff0c;只能写这个玩意儿&#xff0c;因为这里是库里的方法*/ Queue(name "lazy.queue",//如果不存在就创建lazy.queue队列durable "true",//把耐用打开arguments Argument(name "x-que…

Python打卡:Day38

知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 浙大疏锦行

质量管理五大核心工具之SPC

SPC&#xff08;Statistical Process Control&#xff0c;统计过程控制&#xff09;是一种基于统计学的质量控制方法&#xff0c;旨在通过监控和分析生产过程数据&#xff0c;识别异常波动并消除异常因素&#xff0c;从而确保过程稳定受控&#xff0c;提升产品质量一致性145。以…

【世纪龙科技】新能源汽车VR虚拟体验展示馆-解锁认知新维度

解锁新能源汽车深度认知新维度&#xff1a;沉浸式 VR 虚拟体验展示馆 在科技不断突破边界的当下&#xff0c;人们对新能源汽车的探索渴望愈发强烈。无论是希望深入了解行业发展脉络的求知者&#xff0c;还是想要直观掌握汽车技术原理的学习者&#xff0c;传统的展示方式似乎总…

oracle基础审计管理

Oracle数据库审计功能详解(简单易懂!) 更新时间&#xff1a;2024年01月30日 16:21:27 作者&#xff1a;前程的前程也迷茫 Oracle审计查询是一项重要的任务,可以帮助DBA更好的管理Oracle数据库,下面这篇文章主要给大家介绍了关于Oracle数据库审计功能的相关资料,文中通过代码介绍…

Day44 预训练模型

目录 一、预训练的概念 二、常见的分类预训练模型 2.1 CNN架构预训练模型 2.2 Transformer类预训练模型 2.3 自监督预训练模型 三、图像预训练模型的发展史 四、预训练的策略 五、预训练代码实战&#xff1a;resnet18 六、尝试在cifar10对比alexnet 七、尝试通过ctrl进…