UDP接続を使用してC++でサーバーとクライアントプログラムを使用して別のコンピューターのMACアドレスを取得しようとしています。サーバーは1台のコンピューター上にあります(1つは接続されたクライアントのIPアドレス用、もう1つはMACアドレス用の2つのリストボックスが含まれています)クライアントは別のコンピューター上にあります。現在のコードは、サーバーとクライアント、および同じコンピューターを実行している場合にのみ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);
}