VC++常用方法__获得主机名及IP


//
// 调试平台: Visual C++.NET 2003
// 注意:
// 1. 新建 "win32项目"
// 2. 在工程中添加 "WSock32.dll"
//

#include "windows.h"
#include "winsock.h"

int WSAReturn;
WSADATA WSAData;
HOSTENT *hostEntry;
char hostName[256];
char hostAddress[256];

int APIENTRY WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow )
{
 WSAReturn = WSAStartup( 0x0101 , &WSAData );
 if( WSAReturn == 0 )
 {
  //得到主机名
  gethostname( hostName , 256 );
  //根据主机名得到主机实例
  hostEntry = gethostbyname( hostName );
  //提取IP地址
  if( hostEntry != 0 )
  {
   wsprintf(
    hostAddress , "%d.%d.%d.%d" ,
    (hostEntry->h_addr_list[0][0]&0x00ff) ,
    (hostEntry->h_addr_list[0][1]&0x00ff) ,
    (hostEntry->h_addr_list[0][2]&0x00ff) ,
    (hostEntry->h_addr_list[0][3]&0x00ff)
   );
  }
  char msg[512];
  wsprintf( msg , "主机名: %s/nIP地址: %s/n" , hostName , hostAddress );
  MessageBox( NULL , msg , "主机名及IP" , MB_OK );
 }
 WSACleanup();
}

//
//  主要用的函数有
//  WSAStartup()
//  WSACleanup()
//  gethostname()
//  gethostbyname()
//

WSAStartup()
【函数原型】
    int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);
【使用说明】
    每一个使用winsock的应用程序,都必须进行WSAStart函数调用,
    并且只有在调用成功之后才能使用其它的winsock网络操作函数。

    wVersionRequired:<输入>表示欲使用的Winsock版本,这是一个WORD类型的整数,
    它的高位字节定义的是次版本号,低位字节定义的是主版本号。

  LpWSAData:<输出>是一个指向WSADATA资料的指针。这个资料我们一般不使用。

    返回值:调用成功返回0;
    否则,返回出错信息。


WSAClenaup()
【函数原型】
    int PASCAL FAR WSACleanup(void);
【使用说明】
    winsock使用后,要调用WSACleanup函数关闭网络设备,以便释放其占用的资源。


gethostname()
【函数原型】
    int PASCAL FAR gethostname (char FAR * name, int namelen);
【使用说明】
    该函数可以获取本地主机的主机名,其中:

  name:<输出>用于指向所获取的主机名的缓冲区的指针。

  Namelen:<输入>缓冲区的大小,以字节为单位。

  返回值:若无错误,返回0;
    否则,返回错误代吗。


gethostbyname()
【函数原型】
    struct hostent FAR * PASCAL FAR gethostbyname(const char FAR * name);
【使用说明】
  该函数可以从主机名数据库中得到对应的“主机”。

  该函数唯一的参数name就是前面调用函数gethostname()得到的主机名。
    若无错误,刚返回一个指向hostent结构的批针,它可以标识一个“主机”列表。

  Hostent结构定义如下:

    Struct hostent
    {
    char FAR * h_name;
    char FAR FAR ** h_aliases;
    short h_addrtype;
    char FAR FAR ** h_addr_list;
    }

  其中:

  h_name:<输入>主机名地址(PC)。
  h_aliases:一个由主机备用名组成的空中止数组。
  H_addrtype:返回地址的类型,对于Winsock,这个域总是PF_INET。
  H_lenth:每个地址的长度(字节数),对应于PF_INET域应该为4。
  H_addr_list:应该以空指针结尾的主机地址的列表,返回的地址是以网络顺序排列的。

  其中,h_addr_list[0]存放的就是本地主机的4个字节的IP地址,即:

  h_addr_list[0][0].h_addr_list[0][1].h_addr_list[0][2].h_addr_list[0][3]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值