当前位置: 首页 > 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;
}

相关文章:

  • 深度学习框架入门指南:PyTorch 核心实战
  • Discrete Audio Tokens: More Than a Survey
  • 修复opensuse 风滚草rabbitmq的Error: :plugins_dir_does_not_exist问题
  • 随机生成的乱码域名”常由**域名生成算法(DGA)** 产生
  • Flutter基础(UI监听)
  • MyBatis 缓存机制详解
  • Nestjs框架: nestjs-bull的使用与相关queue的规划
  • 【RAG面试题】LLMs已经具备了较强能力,存在哪些不足点?
  • day49-硬件学习之I2C(续)
  • TTvideo免费开源PC录屏软件
  • UE--Slate 焦点、捕获,输入处理与玩家控制器的关系
  • 【 MyBatis-Plus | 精讲 】
  • 1 Studying《Is Parallel Programming Hard》1-5
  • 【网络安全】密码学知识普及
  • leetcode.2014 重复k次的最长子序列
  • Unity 脚本自动添加头部注释
  • 不同信创系统如何集中远程运维?贝锐向日葵提供稳定方案
  • 科技如何影响我们的生活?
  • word中如何保存高清图片,并保存为高质量的pdf文件(图像不失真)
  • uniappx 安卓app项目本地打包运行,腾讯地图报错:‘鉴权失败,请检查你的key‘