• 网络学习_1



    基本数据结构

        通用socket地址结构
              struct sockaddr
               {
                     u_short sa_family;           //协议地址簇
                     char sa_data[14];             //通用地址
               }

        ipv4专用地址结构
              struct sockaddr_in
               {
                   short   sin_family;                // 协议地址簇
                   u_short sin_port;                 // 端口号,网络字节序
                   struct  in_addr sin_addr;       // ip地址,网络字节序
                   char    sin_zero[8];                // 这8个字节纯粹是为了跟通用地址结构体对齐用的,没有实际用处
               };

              struct in_addr
               {
                   union
                   {
                       struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
                       struct { u_short s_w1,s_w2; } S_un_w;
                       u_long S_addr;
                   } S_un;

              #define s_addr   S_un.S_addr                  //can be used for most tcp & ip code
              #define s_imp     S_un.S_un_w.s_w2        // imp
              #define s_net      S_un.S_un_b.s_b1        // network

              #define s_host    S_un.S_un_b.s_b2       // host on imp
              #define s_lh        S_un.S_un_b.s_b3         // logical host
              #define s_impno S_un.S_un_b.s_b4     //  imp
        }
    十一章转换函数

              unsign long WSAAPI inet_addr(const char FAR * cp);
           描述:
                将一个点分十进制表示的ipv4地址转换为一个32位的二进制描述的网络字节序地址
          参数:
                cp有四种形式,a.b.c.d, a.b.c, a.b a
           返回值
                 成功返回一个32位二进制描述的网络字节序地址;

                 如果传入字符串不是合法的地址,函数失败返回INADDR_NONE。(注意:INADDR_NONE = 0xffffffff,如果字符串为广播地址“255.255.255.255”,函数返回值也是 0xffffffff,与出错时的返回值相同)

               char FAR *WSAAPI inet_ntoa(struct in_addr in);
           描述:
                 将一个ipv4结构体地址转换为点分十进制地址字符串
           参数:
                  struct in_addr 结构体对象
           返回值:
                  成功返回一个指向静态(static)缓冲区的指针,是可现实的ascII字符串,包含点分十进制描述的网络地址;

                  失败返回NULL。(注意:函数返回的字符串所用的内存是winsock分配,so要使用这个字符串需要调用者保存此字符串的副本)

     第十二章函数_同步名字解析

                    hostent结构体

                       struct  hostent

                       {

                             char    FAR * h_name;           /* official name of host */

                             char    FAR * FAR * h_aliases;  /* alias list */

                             short   h_addrtype;             /* host address type */

                             short   h_length;               /* length of address */

                             char    FAR * FAR * h_addr_list; /* list of addresses */ 网络字节序地址

                             #define h_addr  h_addr_list[0]          /* address, for backward compat */

                       };



     

     

          struct hostent FAR * WSAAPI gethostbyname(  const char FAR * name  );

          struct hostent FAR * WSAAPI gethostbyaddr(const char FAR * addr, int len, int type );

          描述:

                  根据应用程序传入的主机名(或者ip地址)得到与主机有关的信息,

           要使用返回的信息,需要调用者复制一份该结构体

          参数:

                 name:要解析的主机名字,注意不能解析ip地址。当为空字符串,或者NULL时,得到的本机的信息

                 addr:指向struct in_addr结构体的指针。

                 len: 地址的长度,对于ipv4长度就是4

                 type: 地址类型,如ipv4为AF_INET

          返回值:

                 成功返回一个指向hostent结构体的指针;

                 失败返回NULL,应用程序可以通过WSAGetLastError()得到具体的错误代码。

     

           servent结构体

                struct  servent

                {

                         char    FAR * s_name;           /* official service name */

                         char    FAR * FAR * s_aliases;  /* alias list */

                         short   s_port;                 // port  网络字节序

                         char    FAR * s_proto;          /* protocol to use */

                };

           struct servent FAR * WSAAPI getservbyname(  char FAR * name, const char FAR * proto );

           struct servent FAR * WSAAPI getservbyport( int port,  const char FAR * proto );

           描述:

                  根据名字或者端口号查看服务信息(ftp,telnet,http等),

           从本地系统的配置文件WindowsSystem32driversetcservices查询

           (PS: 这个服务在网络协议里面就是应用层协议)

     

           参数:

                  name:服务的名字

                  port:   服务的端口

                  proto: 传输层协议,比如“tcp”

            返回值:

                  成功返回指向servent结构体的指针;

                  失败返回NULL,可以调用WSAGetLastError()得到具体的错误码

     

            protoent结构体

                   struct  protoent

                    {

                        char    FAR * p_name;           /* official protocol name */

                        char    FAR * FAR * p_aliases;  /* alias list */

                        short   p_proto;                /* protocol 主机字节序

                    };

           struct protoent FAR * WSAAPI getprotobynumber(int number);

           struct protoent FAR * WSAAPI getprotobyname( const char FAR * name );

           描述:

                   根据协议名字或者协议编号(在tcp/ip协议簇里面的报文头里面的号码),查询协议相关信息。

            从本地系统的配置文件WindowsSystem32driversetcprotocol文件中查询

            (PS: 这个协议在网络协议里面就是传输层跟网络层的协议)

           参数:

                   number:协议的编号

                   name:协议的名字

           返回值:

                  成功返回指向protoent结构体的指针;

                  失败返回NULL,调用者可以调用WSAGetLastError()得到具体的错误信息

    十三章 异步名字解析

                HANDLE WSAAPI WSAAsyncGetHostByName(

                           HWND hWnd,

                           u_int wMsg,

                           const char FAR * name,

                           char FAR * buf,

                           int buflen);

                 HANDLE WSAAPI WSAAsyncGetHostByAddr(

                           HWND hWnd, 

                           u_int wMsg,

                           const char FAR * addr, 

                           int len,int type,

                           char FAR * buf,

                           int buflen);

                 描述:

                         通过名字或地址进行主机名的异步查询

                 参数:

                        hWnd:应用程序窗口句柄,异步操作完成时,该句柄指向的窗口会收到wMsg消息

                        wMsg:请求完成时收到的消息编号,由应用程序自己定义

                        name:主机名字,以''结束

                        addr:  主机地址,按网络字节序保存

                        len:     addr的长度

                        buf:    包含查询结果的数据缓冲区,返回的数据其实是hostent结构体,建议大小是

                             AXGETHOSTSTRUCT

                 返回值:

                        成功返回异步操作的句柄;

                        失败返回0,调用WSAGetLastError()可以得到具体的错误码。

  • 相关阅读:
    给webstorm换个背景图
    css遮罩 mask属性
    svg图标
    BFC原理
    轮播图与图片查看器
    超大分辨率屏幕适配方案
    移动端适配-动态计算rem
    [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. 报错
    由于ie浏览器ajax缓存 导致layui table表格重载失败的解决办法
    实现线程操作的三种方法
  • 原文地址:https://www.cnblogs.com/talenth/p/5807936.html
Copyright © 2020-2023  润新知