2013-03-25 123 views
0

我创建了一个客户端服务器程序,显示客户端的MAC地址和IP地址,我有一个获取计算机MAC地址的功能,但是我无法打印MAC地址列表框。我创建了一个打印功能,但之前工作,但我改变了寻找MAC地址的代码,现在它不工作(也不知道我是否在正确的地方打电话给printMACaddress)。我有两个列表框 - 一个显示ip地址,另一个显示MAC地址。当我点击IP地址我想要显示该计算机的MAC地址,但现在它不显示。没有任何反应,当我点击的IP地址如何打印MAC地址

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; 
    } 
+2

*“我创建了一个以前可以工作的打印功能,但我更改了查找mac地址的代码,现在它不能正常工作”*为什么更改用于查找MAC地址的代码? – m0skit0 2013-03-25 14:00:54

+0

,因为原始代码仅用于查找当前计算机的MAC地址,但我试图找到连接到服务器的任何计算机的MAC地址。我有列表框中的旧代码事件处理程序,但现在我创建了一个单独的函数来查找地址 – 2013-03-25 14:03:07

+0

基本上问题是打印功能不工作在我创建的新功能,我不知道为什么 – 2013-03-25 14:16:42

回答

1

你一定要明白,你的意见陈述的目标(“我试图找到一个连接到服务器的任何计算机的MAC地址”)是不可能的? MAC地址的级别低于IP地址,它们标识“媒体端口”,即电缆所在的位置。

您无法获得交换机另一端的客户端的MAC地址,甚至不能通过互联网获得。

+0

我不使用互联网。我正在使用UDP连接。该程序可以在没有互联网的情况下工 – 2013-03-25 15:09:08