网上找的一个C++写的扫描局域网主机信息的程序,部分代码看不懂,求大神指导,非常感谢
void CNeighborInfoDlg::ReceiveMessage()
{
BYTE Buf[500];
//m_UDPSocket.Receive(Buf,500,0);
static CString strOldIP;
CString str,strIP,strHost,strHex,strMac,Host,Group,User;
UINT dport;
m_socket.ReceiveFrom(Buf,500,strIP,dport,0);
if(strIP==(char)NULL||strIP==strOldIP)return;
strOldIP=strIP;
//ip
int index=m_ListView.InsertItem(0,strIP);
strHost="";
strHex="";
User="?";
Host="\\";
int tem=0,num=0;
bool bAdd=true;
for(int i=0;i<500;i++)
{
if(i%50==0)
TRACE("\n");
TRACE("%c",Buf[i]);
}
//nbtstat前面的57个字节是
for(i=57;i<500;i++) //57-72
{
//end
if(Buf[i]==0xcc)
break;
if(Buf[i]==0x20)
bAdd=false;
if(bAdd)
{
str.Format("%c",Buf[i]);
if(Buf[i]>=' ')strHost+=str;
str.Format("%02x.",Buf[i]);
strHex+=str;
}
if((++tem)%18==0)
{
bAdd=true;
//m_ListBox.AddString(strHost);//
strHost.TrimRight((char)NULL);
if(strHost=="")
{
strMac.Delete(17,strMac.GetLength()-17);
m_ListView.SetItem(index,4,LVIF_TEXT,strMac, 0, 0, 0,0);
break;
}
if(num==0&&strHost!="")
{
m_ListView.SetItem(index,2,LVIF_TEXT,strHost, 0, 0, 0,0);
Host=strHost;
num++;
}
else
{
if(Host!=strHost&&num==1&&strHost!="")
{
m_ListView.SetItem(index,1,LVIF_TEXT,strHost, 0, 0, 0,0);
Group=strHost;
num++;
}
else
{
if(strHost!=Host&&strHost!=Group&&num==2&&strHost!="")
{
User=strHost;
if(User!="__MSBROWSE__")
{
m_ListView.SetItem(index,3,LVIF_TEXT,User, 0, 0, 0,0);
num++;
}
}
}
}
strMac=strHex;
strHost="";
strHex="";
}
}
SetEvent(wait_handle);
}