socket网络编程之二:gethostbyname()和gethostbyaddr()用法
2011-04-05 18:35
435 查看
1. gethostbyname:根据主机名字得到主机信息:
struct hostent FAR *WSAAPI gethostbyname(const char FAR * name);
gethostbyaddr:根据主机地址获取主机信息:
struct hostent FAR *WSAAPI gethostbyaddr(const char FAR * addr,
int len,
int type);
2.主机信息的结构定义:
/*
* Structures returned by network data base library, taken from the
* BSD file netdb.h. All addresses are supplied in host order, and
* returned in network order (suitable for use in system calls).
*/
struct hostent {
char FAR * h_name; /* official name of host */
char FAR * FAR * h_aliases; /* alias list */
short h_addrtype; /* host address type */
short h_length; /* length of address */
char FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr h_addr_list[0] /* address, for backward compat */
};
3.示例程序和运行结果:
#include <winsock2.h>
#include <stdio.h>
int DisplayHostInfo(char* pName);
#pragma comment(lib, "ws2_32.lib ")
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 0 );
if (WSAStartup(wVersionRequested , &wsaData)!=0)
{
printf("Winsock Initialization failed./n");
exit(0);
};
DisplayHostInfo("www.163.com");
}
int DisplayHostInfo(char* pName)
{
struct hostent *pHost=NULL;
BYTE ucIdx =0;
//naddr = (inet_addr("192.168.0.22"));
//pHost =gethostbyaddr((char*)&naddr,4,AF_INET);
pHost =gethostbyname(pName);
if(pHost == NULL)
{
printf("/r/ngethostbyname error!!/n/r");
return -1;
}
printf("/r/nh_name: %s",pHost->h_name);
for(ucIdx = 0; pHost->h_aliases[ucIdx]; ucIdx++)
{
printf("/r/nh_aliases[%u]: %s",ucIdx,pHost->h_aliases[ucIdx]);
}
printf("/n/rh_addrtype: %u",pHost->h_addrtype);
printf("/n/rh_length: %u",pHost->h_length);
for(ucIdx = 0; pHost->h_addr_list[ucIdx]; ucIdx++)
{
printf("/r/nh_addr_list[%u]: %s/r/n",ucIdx,inet_ntoa(*(struct in_addr*)pHost->h_addr_list[ucIdx]));
}
return 0;
}
运行结果:
DisplayHostInfo("www.163.com")获取的信息:
h_name: 163.xdwscache.glb0.lxdns.com
h_aliases[0]: www.163.com
h_aliases[1]: www.cache.wangsu.netease.com
h_aliases[2]: www.163.com.lxdns.com
h_aliases[3]: www.163.z.lxdns.com
h_addrtype: 2
h_length: 4
h_addr_list[0]: 222.88.95.169
h_addr_list[1]: 222.88.95.137
struct hostent FAR *WSAAPI gethostbyname(const char FAR * name);
gethostbyaddr:根据主机地址获取主机信息:
struct hostent FAR *WSAAPI gethostbyaddr(const char FAR * addr,
int len,
int type);
2.主机信息的结构定义:
/*
* Structures returned by network data base library, taken from the
* BSD file netdb.h. All addresses are supplied in host order, and
* returned in network order (suitable for use in system calls).
*/
struct hostent {
char FAR * h_name; /* official name of host */
char FAR * FAR * h_aliases; /* alias list */
short h_addrtype; /* host address type */
short h_length; /* length of address */
char FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr h_addr_list[0] /* address, for backward compat */
};
3.示例程序和运行结果:
#include <winsock2.h>
#include <stdio.h>
int DisplayHostInfo(char* pName);
#pragma comment(lib, "ws2_32.lib ")
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 0 );
if (WSAStartup(wVersionRequested , &wsaData)!=0)
{
printf("Winsock Initialization failed./n");
exit(0);
};
DisplayHostInfo("www.163.com");
}
int DisplayHostInfo(char* pName)
{
struct hostent *pHost=NULL;
BYTE ucIdx =0;
//naddr = (inet_addr("192.168.0.22"));
//pHost =gethostbyaddr((char*)&naddr,4,AF_INET);
pHost =gethostbyname(pName);
if(pHost == NULL)
{
printf("/r/ngethostbyname error!!/n/r");
return -1;
}
printf("/r/nh_name: %s",pHost->h_name);
for(ucIdx = 0; pHost->h_aliases[ucIdx]; ucIdx++)
{
printf("/r/nh_aliases[%u]: %s",ucIdx,pHost->h_aliases[ucIdx]);
}
printf("/n/rh_addrtype: %u",pHost->h_addrtype);
printf("/n/rh_length: %u",pHost->h_length);
for(ucIdx = 0; pHost->h_addr_list[ucIdx]; ucIdx++)
{
printf("/r/nh_addr_list[%u]: %s/r/n",ucIdx,inet_ntoa(*(struct in_addr*)pHost->h_addr_list[ucIdx]));
}
return 0;
}
运行结果:
DisplayHostInfo("www.163.com")获取的信息:
h_name: 163.xdwscache.glb0.lxdns.com
h_aliases[0]: www.163.com
h_aliases[1]: www.cache.wangsu.netease.com
h_aliases[2]: www.163.com.lxdns.com
h_aliases[3]: www.163.z.lxdns.com
h_addrtype: 2
h_length: 4
h_addr_list[0]: 222.88.95.169
h_addr_list[1]: 222.88.95.137
相关文章推荐
- Linux下的网络函数gethostbyname/gethostbyaddr会访问DNS吗?
- (转载)Linux网络编程-使用gethostbyaddr,通过ip地址,得到该ip地址的主机的信息
- java网络编程之Socket用法详解一
- 名字与地址(端口)转换——gethostbyname/gethostbyaddr(getservbyname/getservbyport)
- 网络socket编程指南之二
- gethostbyaddr由IP地址取得网络数据
- 【网络编程】之二、socket API学习
- 海思板子利用unixctl socket网络编程,进行接口请求和cJSON解析之二
- java网络编程---socket用法详解(学习心得)
- TCP网络编程流程及Socket API基本用法
- java网络编程 Socket 用法举例
- java网络编程Socket中SO_LINGER选项的用法解读
- Boost::thread 用法(网络socket引用)TCPIP编程
- 主机名与网络名查询gethostbyname,gethostbyaddr 与 高级名字与地址转换————getaddrinfo()函数详解 .
- 【VS开发】网络SOCKET编程INADDR_ANY选项
- 【网络编程】之二、socket API学习
- JAVA网络编程之Socket用法
- TCP/UDP网络编程入门教程之二:TCP Server端——socket与文件描述符
- Java 网络编程 学习笔记二 Socket 用法
- [转] Java网络编程精解之ServerSocket用法详解一