获取本机所有IP地址
int CMachine::GetLocalIPs(std::vector<CString>& vIPValue)
{vIPValue.clear();int IpNum = 0;WSADATA wsaData;int ret = WSAStartup(MAKEWORD(2, 2), &wsaData);if (ret != 0){return -1;}char hostname[256];ret = gethostname(hostname, sizeof(hostname));if (ret == SOCKET_ERROR){return -1;}HOSTENT* host = gethostbyname(hostname);if (host == NULL){return -1;}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地址
int CMachine::GetLanIPs(std::vector<CString>& vIPValue)
{vIPValue.clear();int IpNum = 0;WSADATA wsaData;int ret = WSAStartup(MAKEWORD(1, 1), &wsaData);if (ret != 0){return -1;}char hostname[256];gethostname(hostname, sizeof(hostname));CString strHostName;strHostName = hostname;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
int CMachine::SearchEnableIP()
{std::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;}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;}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
int CMachine::SearchLanEnableIP()
{std::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;
}