Pārlūkot izejas kodu

新增函数:获取本机IP地址

scbc.sat2 5 gadi atpakaļ
vecāks
revīzija
f092ff9edd

+ 79 - 0
SATService/SATService/Global.cpp

@@ -10,6 +10,9 @@
 #include <WinVer.h>		
 #pragma comment(lib,"version.lib")
 #include "CritSection.h"
+// 获取本机ip地址;
+#include <Iphlpapi.h>  
+#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库 
 
 namespace Global
 {
@@ -1083,4 +1086,80 @@ namespace Global
 		_tsetlocale(LC_CTYPE, old_locale);
 		free(old_locale); //还原区域设定;
 	}
+
+	std::string GetLocalAddress(int nType/*= MIB_IF_TYPE_ETHERNET*/)
+	{
+		std::string strAddress;
+		int nCardNo = 1;
+		// PIP_ADAPTER_INFO结构体指针存储本机网卡信息 
+		PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
+		// 得到结构体大小,用于GetAdaptersInfo参数 
+		unsigned long stSize = sizeof(IP_ADAPTER_INFO);
+		// 调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量 
+		int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
+		// 记录网卡数量 
+		int netCardNum = 0;
+		// 记录每张网卡上的IP地址数量 
+		int IPnumPerNetCard = 0;
+		if(ERROR_BUFFER_OVERFLOW == nRel)
+		{
+			// 如果函数返回的是ERROR_BUFFER_OVERFLOW 
+			// 则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小 
+			// 这也是说明为什么stSize既是一个输入量也是一个输出量 
+			// 释放原来的内存空间 
+			delete pIpAdapterInfo; 
+			// 重新申请内存空间用来存储所有网卡信息 
+			pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
+			// 再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量 
+			nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
+		}
+
+		if(ERROR_SUCCESS == nRel)
+		{
+			// 输出网卡信息 
+			// 可能有多网卡,因此通过循环去判断 
+			while (pIpAdapterInfo)
+			{
+				// 可能网卡有多IP,因此通过循环去判断 
+				IP_ADDR_STRING*pIpAddrString = &(pIpAdapterInfo->IpAddressList);
+				if ( pIpAdapterInfo->Type == nType )
+				{
+					return pIpAddrString->IpAddress.String;
+					break;
+				}
+#if 0
+				switch(pIpAdapterInfo->Type)
+				{
+				case MIB_IF_TYPE_OTHER:
+				case MIB_IF_TYPE_ETHERNET:
+				case MIB_IF_TYPE_TOKENRING:
+				case MIB_IF_TYPE_FDDI:
+				case MIB_IF_TYPE_PPP:
+				case MIB_IF_TYPE_LOOPBACK:
+				case MIB_IF_TYPE_SLIP:
+					{
+						strAddress = pIpAddrString->IpAddress.String;
+						// 需要注意的是有时可能获取的IP地址是0.0.0.0,这时需要过滤掉 
+						if(std::string("0.0.0.0") == strAddress)
+							break;
+						std::cout<<_T("第")<<nCardNo<<_T("张网卡的IP地址是")<<strAddress<<std::endl;
+						nCardNo++;
+						break;
+					}
+				default:
+					// 未知类型网卡就跳出 
+					break;
+				}
+#endif
+				pIpAdapterInfo = pIpAdapterInfo->Next;
+			}
+		}
+		// 释放内存空间 
+		if (pIpAdapterInfo)
+		{
+			delete pIpAdapterInfo;
+		}
+
+		return std::string();
+	}
 };

+ 2 - 0
SATService/SATService/Global.h

@@ -139,6 +139,8 @@ namespace Global
 	bool MKDIR(LPCTSTR dir);
 	// 写脚本日志;
 	void WritePythonLog(LPCTSTR file, const TCHAR* msg);
+	// 获取本机IP地址;
+	std::string GetLocalAddress(int nType = MIB_IF_TYPE_ETHERNET);
 };
 
 #endif

+ 1 - 1
SATService/SATService/SATExecutor.cpp

@@ -130,7 +130,7 @@ bool CSATExecutor::Login()
 	url.append("/ajaxInteractiveManage!executeLogin.action");
 	// ʾÀýÖµ;
 	m_stLoginReq.strUserName = "superAdmin";
-	m_stLoginReq.strStatus = "0";
+	m_stLoginReq.strStatus = "0";   // 0±íʾµÇ¼;
 	m_stLoginReq.strDeleteStatus = "";
 	m_stLoginReq.strIP = "10.118.158.175";
 	m_stLoginReq.strStorage = "";

+ 4 - 0
SATService/SATService/SATService.cpp

@@ -60,6 +60,10 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		Global::GetIniInfo();
 #ifdef _DEBUG
 		//WorkStart();
+		printf(Global::GetLocalAddress().c_str());
+		system("pause");
+		return 0;
+
 		CSATDevices::GetInstance()->StartWork();
 		while (true)
 		{