我正在尝试使用 C++ 中的服务器和客户端程序使用 UDP 连接获取另一台计算机的 MAC 地址。服务器在一台计算机上(它包含 2 个列表框,1 个用于连接客户端的 IP 地址,另一个用于 MAC 地址)客户端在另一台计算机上。如果我运行服务器和客户端以及同一台计算机,我当前的代码只会获取 MAC 地址。当我调试程序时,我看到当试图获取另一台计算机的 MAC 地址时,程序不会进入 if 语句并运行 PrintMACaddress(pAdapterInfo->Address);
void CmfcServerDlg:: PrintMACFromIP(const CString &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;// Contains pointer to current adapter info
bool found = false;
do {
const IP_ADDR_STRING *addr_str = &pAdapterInfo->IpAddressList;
if (addr_str != NULL)
{
if (selected_ip_adr == addr_str->IpAddress.String)
{
PrintMACaddress(pAdapterInfo->Address);
}
}
pAdapterInfo = pAdapterInfo->Next;
}
while(pAdapterInfo);
}
我发现使用 ARP 功能可能对此有所帮助,或者由于 MAC 地址是数据,我可以将其作为字符串或原始数据传输,但我知道如何做到这一点
这是 PrintMAC 函数:
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);
}