#include<winsock2.h>
#include<stdio.h>
#include<stdlib.h>
#pragma comment(lib, "ws2_32.lib")
void main()
{
WSADATA wsaData;
int n;
//存放主机名称
char hostname[256];
//主机信息指针
hostent * pHostent;
//主机协议信息指针
protoent * pProtoent;
struct sockaddr_in sa;
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Failed to load Winsock.\n ");
return;
}
printf("---------------------------------------------\n");
//获得主机名
if(gethostname(hostname, sizeof(hostname))!= 0)
{
printf("gethostname() Error: %u\n", WSAGetLastError());
return;
}
printf("以下信息由gethostname()函数取得\n");
printf("Local host name:%s\n", hostname);
printf("---------------------------------------------\n");
//根据主机名获取主机信息
pHostent=gethostbyname(hostname);
if (pHostent==NULL)
{
printf("gethostbyname() Error: %u\n", WSAGetLastError());
return ;
}
//解析返回的hostent结构中名称、别名、地址类型和地址长度信息
printf("以下信息由gethostbyname()函数取得\n");
printf("name:%s\naliases:%s\naddrtype:%d\nlength:%d\n",pHostent->h_name,pHostent->h_aliases,pHostent->h_addrtype,pHostent->h_length);
//解析hostent结构中的主机地址
for (n=0; pHostent->h_addr_list[n]; n++)
{
memcpy(&sa.sin_addr.s_addr, pHostent->h_addr_list[n],pHostent->h_length);
//输出主机IP地址.
printf("Address: %s\n", inet_ntoa(sa.sin_addr));
}
printf("---------------------------------------------\n");
//根据协议名获得协议信息
pProtoent=getprotobyname("tcp");
if (pProtoent==NULL)
{
printf("getprotobyname() Error: %u\n", WSAGetLastError());
return ;
}
//解析protoent结构中的信息
printf("以下信息由getprotobyname()函数取得\n");
printf("name:%s\nproto:%d\n",pProtoent->p_name, pProtoent->p_proto);
for (n=0; pProtoent->p_aliases[n]; n++)
{
printf("aliases: %s\n",pProtoent->p_aliases[n] );
}
WSACleanup();
}