地址家族/名字解析

来源:互联网 发布:大数据技术基础 编辑:程序博客网 时间:2024/04/30 17:53

   在用winsock创建套接字通讯之前,先要了解如何利用制定的协议为工作站定址。

   ip:网际协议     tcp:面向连接的通信(传输控制协议)   udp:用户数据报协议(面向无连接的)

   AF_INET 地址家族在winsock1.h和2.h种定义。

   定址:sockaddr_in

sturct sockaddr_in

{

      short   sin_family;

      u_short  sin_port;

      struct in_addr  sin_addr;

      char        sin_zero【8】;

}

sin_family    -》AF_INET  ->使用ip地址家族

sin_addr  -》通过 inet_addr()api函数转换 

      特殊ip地址:INADDR_ANY 允许服务器引用监听主机计算机上面每个网络接口上的客户机活动。一般情况下

在该地址绑定的套接字和本地接口是,网络引用才里也难怪这个地址来监听连接。

      特殊地址:INADDR_BTOADCAST 用于在一个ip网络中发送广播UDP数据报。要使用这个地址,需要引用设置

套接字选项SO_BROADCAST .

      字节序:把端口号转换成网络字节序

htons(nPortId);

      名字解析:Wi n s o c k应用打算通过I P和主机通信时,必须知道这个主机的I P地址。依用户看来, I P地
址是不容易记的。在指定机器时,许多人更愿意利用一个易记的、友好的主机名而不是I P地
址。Wi n s o c k提供了两个支持函数,它们有助于用户把一个主机名解析成I P地址。

1、gethostbyname(const char far * name)

2、WSAAsynGetHostByName(hwnd hwnd,INT wmsg,const char * name,char far * buf, int buflen)从主机数据库中取回,与指定的主机名对应的主机信息。

以上两个函数均返回 hostent 结构体

{

CHAR FAR *    h_name;      //正式的主机名

char far * far * h_aliases; //字段是一个由主机备用名组成的空中止数组。

short   h_addrtype;             //表示即将返回的地址家族

short   h_length;                  //对h a d d r l i s t字段中的每一个地址定义字节长度进行定义

char far * far * h_addr_list;//是一个由主机I P地址组成的空中止数组,一般情况下,应用
程序都采用该数组中的第一个地址

}

g e t h o s t b y a d d r()他们是为了获得与ip网络地址相应的主机信息而设计的。返回 HOSTENT

WSAAsyncGetHostByAddr() 是以上函数的异步版