当然你也可以使用获得到的IP再去解析域名,看域名是否合适 getnameinfo The getnameinfo function provides name resolution from an address to the host name. int getnameinfo( const struct sockaddr FAR *sa, socklen_t salen, char FAR *host, DWORD hostlen, char FAR *serv, DWORD servlen, int flags );
当然你也可以使用获得到的IP再去解析域名,看域名是否合适 getnameinfo The getnameinfo function provides name resolution from an address to the host name. int getnameinfo( const struct sockaddr FAR *sa, socklen_t salen, char FAR *host, DWORD hostlen, char FAR *serv, DWORD servlen, int flags );
这样了好了,不然你怎么知道到底DNS返回的是不是你想要的域名对应的IP呢?
getnameinfo
The getnameinfo function provides name resolution from an address to the host name. int getnameinfo(
const struct sockaddr FAR *sa,
socklen_t salen,
char FAR *host,
DWORD hostlen,
char FAR *serv,
DWORD servlen,
int flags
);
getnameinfo
The getnameinfo function provides name resolution from an address to the host name. int getnameinfo(
const struct sockaddr FAR *sa,
socklen_t salen,
char FAR *host,
DWORD hostlen,
char FAR *serv,
DWORD servlen,
int flags
);
if(m_phostent == NULL)
{
return FALSE;
}
///连接
struct in_addr ip_addr;
memcpy(&ip_addr,m_phostent->h_addr_list[0],4);///h_addr_list[0]里4个字节,每个字节8位
struct sockaddr_in destaddr;
memset((void *)&destaddr,0,sizeof(destaddr));
destaddr.sin_family = AF_INET;
destaddr.sin_port = htons(80);
destaddr.sin_addr = ip_addr; ///保存主机的IP地址
m_ipaddr[0] = (BYTE)destaddr.sin_addr.S_un.S_un_b.s_b1;
m_ipaddr[1] = (BYTE)destaddr.sin_addr.S_un.S_un_b.s_b2;
m_ipaddr[2] = (BYTE)destaddr.sin_addr.S_un.S_un_b.s_b3;
m_ipaddr[3] = (BYTE)destaddr.sin_addr.S_un.S_un_b.s_b4; sockaddr_in saddr = destaddr; char host_name[NI_MAXHOST];
if(getnameinfo((sockaddr *)&saddr,sizeof(sockaddr_in),host_name,NI_MAXHOST,NULL,0,NI_NAMEREQD) != 0)
{
CString csTemp;
csTemp.Format(_T("%d"),WSAGetLastError());
AfxMessageBox(csTemp);
return FALSE;
}
hostent *hptr = gethostbyaddr(m_phostent->h_addr_list[0],4,AF_INET);
if(hptr == NULL);
{
return FALSE;
}