クライアントの MAC アドレスと IP アドレスを表示するクライアント サーバー プログラムを作成しました。コンピューターの MAC アドレスを取得する機能がありますが、リスト ボックスに MAC アドレスを出力するのに問題があります。以前は機能していた印刷機能を作成しましたが、MACアドレスを見つけるためのコードを変更したところ、機能しなくなりました(正しい場所でprintMACaddressを呼び出しているかどうかもわかりません)。2 つのリスト ボックスがあります。1 つは IP アドレスを表示し、もう 1 つは 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;
}