利用winsock擷取主機名稱和ip地址其實很簡單,主要使用的函數就是gethostname和gethostbyname.
首先,使用gethostname(char *name,int namelen)擷取主機名稱,name為儲存主機名稱的buf,namelen為制定的buf的長度。然後使用gethostbyname(char* addr)擷取主機ip,該函數的傳回值是hostent指標。hostent結構體如下:
struct hostent {
char FAR * {
showTip(this)
}">h_name;
char FAR * FAR * {
showTip(this)
}">h_aliases;
short {
showTip(this)
}">h_addrtype;
short {
showTip(this)
}">h_length;
char FAR * FAR * {
showTip(this)
}">h_addr_list;
};
通過遍曆h_addr_list擷取主機的ip地址。
char *pchhostname=new char[256];<br />gethostname(pchhostname,256);<br />hostent *phost=gethostbyname(pchhostname);<br />int i;<br />CString strIp;<br />for(i=0;phost!=NULL&&phost->h_addr_list[i]!=NULL;i++)<br />{<br /> LPCTSTR psz=inet_ntoa(*(struct in_addr*)phost->h_addr_list[i]);<br /> strIp+=psz;<br />strIp+=".";<br />}<br />this->GetDlgItem(IDC_zhuji)->SetWindowText(pchhostname);<br />this->GetDlgItem(IDC_IP)->SetWindowText(strIp);