设为首页 加入收藏

TOP

Windows下C语言网络编程快速入门(二)
2014-11-23 22:08:29 来源: 作者: 【 】 浏览:4
Tags:Windows 语言 网络编程 快速 入门

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]

  一个简单的用消息框显示主机名和IP地址的源程序如下:

#include

int WSA_return;
WSADATA WSAData;

HOSTENT *host_entry;
char host_name[256];
char host_address[256];

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
 WSA_return=WSAStartup(0x0101,&WSAData);

 if(WSA_return==0)
 {
  gethostname(host_name,256);
  host_entry=gethostbyname(host_name);
  if(host_entry!=0)
  {
   wsprintf(host_address,"%d.%d.%d.%d",
    (host_entry->h_addr_list[0][0]&0x00ff),
    (host_entry->h_addr_list[0][1]&0x00ff),
    (host_entry->h_addr_list[0][2]&0x00ff),
    (host_entry->h_addr_list[0][3]&0x00ff));

   MessageBox(NULL,host_address,host_name,MB_OK);

  }
 }
 WSACleanup();
 return 0;
}

  深入编程

  前面显示IP地址的时候,我们使用的是消息框,规范一点的编程应该使用对话框,如何编辑一个对话框,很多书中都有介绍,编辑的对话框可参考图5的运行界面。

  头文件Get_IP.h如下:

BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);

  这个程序只使用了一个对话框过程,一般把这个过程的声明放在头文件中。

  源程序Get_IP.c:

#include
#include"Get_IP.h"
#include"resource.h" //这个头文件在创建资源的时候会自动生成,
//并会在插入资源时自动生成

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6个变态的C语言Hello World程序 下一篇C/C+语言struct深层探索

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: