网络信息获取函数使用实例程序

在这里插入图片描述
在这里插入图片描述

#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();
}

猜你喜欢

转载自blog.csdn.net/weixin_43118073/article/details/105429258
今日推荐