当前位置: 首页 > news >正文

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.lqws.cn/news/549865.html

相关文章:

  • 一起endpoint迷路的问题排查总结
  • 浅谈Apache HttpClient的相关配置和使用
  • git add 报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf in position 42
  • SOCKS 协议版本 5 (RFC 1928)
  • 【stm32】HAL库开发——CubeMX配置串口通讯(中断方式)
  • VUE使用过程中的碰到问题记录
  • 自动对焦技术助力TGV检测 半导体检测精度大突破
  • 工作台-02.代码开发
  • Linux信号机制:从入门到精通
  • [Python]-基础篇1- 从零开始的Python入门指南
  • 微调大语言模型(生成任务),怎么评估它到底“变好”了?
  • Python网安-zip文件暴力破解
  • Java:链接mysql数据库报错:CommunicationsException: Communications link failure
  • Coze API如何上传文件能得到文件的file_url
  • 缓解停车难的城市密码:4G地磁检测器如何重构车位资源分配
  • Discrete Audio Tokens: More Than a Survey
  • TensorRT-LLM的深度剖析:关键问题与核心局限性
  • Java-异常类
  • Spearman检验组间相关性及SCI风格绘图
  • MySQL之事务原理深度解析
  • [Python] -基础篇2-Python中的变量和数据类型详解
  • 运营医疗信息化建设的思路
  • 创建一个简单入门SpringBoot3项目
  • 华为云Flexus+DeepSeek征文|高可用部署 Dify 平台构建 Flux 绘画中台 Chatflow 的设计与实现
  • Re:从零开始的文件结构(融合线性表来理解 考研向)
  • 设计模式精讲 Day 15:解释器模式(Interpreter Pattern)
  • LangChain4j(20)——调用百度地图MCP服务
  • Ubuntu系统Postman资源占用高怎么办?
  • Stable Diffusion入门-ControlNet 深入理解 第二课:ControlNet模型揭秘与使用技巧
  • 【软考--软件设计师】2.程序设计语言