我创建了一个显示客户端的 MAC 和 IP 地址的客户端服务器程序,并且我有一个获取计算机 MAC 地址的功能,但我无法在列表框中打印 MAC 地址。我创建了一个打印功能,该功能之前确实有效,但我更改了查找mac地址的代码,现在它不起作用(我也不知道我是否在正确的地方调用printMACaddress)。我有两个列表框 - 一个显示 IP 地址,另一个显示 MAC 地址。当我单击 IP 地址时,我希望显示该计算机的 MAC 地址,但现在它不显示。当我点击 IP 地址时没有任何反应
void CmfcServerDlg::OnLbnSelchangeListClientaddr()
{
bool GetMACFromIP(BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH], const std::string &selected_ip_adr);
}
void CmfcServerDlg::PrintMACaddress(unsigned char MACData[])
{
CString
strText;
strText.Format("%02X-%02X-%02X-%02X-%02X-%02X\n",MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
m_ClientIdList.AddString(strText);
}
bool CmfcServerDlg::GetMACFromIP(BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH], const std::string &selected_ip_adr)
{
IP_ADAPTER_INFO AdapterInfo[16];
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD dwStatus = GetAdaptersInfo(
AdapterInfo,
&dwBufLen);
assert(dwStatus == ERROR_SUCCESS);
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
bool found = false;
do {
const IP_ADDR_STRING *addr_str = &pAdapterInfo->IpAddressList;
while(addr_str != NULL)
{
if(selected_ip_adr == addr_str->IpAddress.String)
{
found = true;
break;
}
}
if(found)
{
memcpy(Address, pAdapterInfo->Address, MAX_ADAPTER_ADDRESS_LENGTH);
PrintMACaddress(pAdapterInfo->Address); //problem here
break;
}
else
{
PrintMACaddress(pAdapterInfo->Address);
pAdapterInfo = pAdapterInfo->Next;
}
}
while(pAdapterInfo);
return found;
}