根据主机名获得IP好说,前面已经学习过了,用函数gethostbyname获得主机信息,其中包括IP信息
int CNeighborDlg::getIPByName()
{
UpdateData(TRUE); //接收数据
hostent *hostinfo;
hostinfo = gethostbyname(
m_hostname
);
if(hostinfo != NULL){
int i = 0;
char *lpaddr = hostinfo->h_addr_list[i];
//CString iplist[20];
CString list = "";
CString temp;
while (lpaddr){ //循环得到所有的IP
in_addr inAddr;
memmove(&inAddr,lpaddr,4);
temp = inet_ntoa(inAddr);
temp += "/n";
//iplist[i] = temp;
list += temp;
i++;
lpaddr = hostinfo->h_addr_list[i];
}
AfxMessageBox(_T(list));
return 0;
}
else{
int err = WSAGetLastError();
CString strErr;
strErr.Format("%d",err);
AfxMessageBox(_T(strErr));
return 1;
}
}
根据IP获得主机信息则要用gethostbyaddr函数
int CNeighborDlg::getNameByIP(CString addr)
{
long a = inet_addr(addr) ;
if(a == INADDR_NONE){
AfxMessageBox(_T("无效的地址"));
}
hostent *hostinfo;
hostinfo = gethostbyaddr((char*)(&a), strlen(addr), AF_INET); //应该是有问题,外部网无法获得。
if(hostinfo != NULL){
AfxMessageBox(hostinfo->h_name);
return 0;
}
int err = WSAGetLastError();
if(err == WSANO_DATA){
AfxMessageBox(_T("WSANO_DATA"));
return 1;
}
CString strErr;
strErr.Format("%d",err);
AfxMessageBox(_T(strErr));
return 1;
}
这一部分有一个问题,就是有注释的地方,实验的时候获得某些机器是没问题的,而获得另外一些就会有
问题,上网查了下原因,大体上是这样的,此函数是netbios协议里的,而某些机器上是没有打开此协议的,所以就无法获得。时间关系,没有验证此说法的正确与否,以后再寻解决办法。