Windows网络程序设计基础知识拾掇(三)

Windows网络程序设计基础知识拾掇(三)

1.异构环境下的网络编程
      不同的平台以不同的方式存放一个二进制。最常见的两种格式:大数在前的字节顺序和小数在前的字节顺序。
      大字在前:将一个多字节数的高序字节存储在内存的其实地址。而小数在前的字节顺序刚好相反。      
      套接字编程接口(Socket API)提供了4个函数解决本机与网络的字节顺序:
       htons():短整数本机顺序转换为网络顺序,用于端口号。
       htonl():长整数本机顺序转换为网络顺序,用于IP地址。
       ntohs():短整数网络顺序转换为本机顺序,用于端口号。
       ntohl():长整数网络顺序转换为本机顺序,用于IP地址。

      点分十进制的IP地址的转换:
      unsigned long inet_addr(cost char *cp):
                cp:点分十进制形式的IP地址。
                返回值:网络字节序的IP地址,无符号长整数

      char * int_ntoa(struct in_addr  in):
                in:包含长整数IP地址的in_addr结构变量。
               返回值:点分十进制IP地址的字符串指针。

     域名服务:
           struct hostent *  gethodtbyname(const char * name);
            name:站点主机域名字符串。
            返回值:是指向hostent结构指针
            hostent:包含主机名,主机别名数组、返回地址的类型(一般是AF_INET)


2.阻塞与非阻塞
      通信包括阻塞和非阻塞。
      在阻塞模式下,利用TCP协议发送一个报文时,如果低层协议没有可用空间来存放用户数据,则应用进程将阻塞等待直到协议有可用的空间。而非阻塞模式下调用将直接返回而不等待。在应用进程调用接收函数接收报文时,如果是在阻塞模式下,若没有到达数据,则调用将一直阻塞直到有数据到达或者出错,而非阻塞模式下,将直接返回不等待。
      对于UDP协议而言,由于UDP没有发送缓存,因此UDP协议即使在阻塞模式下也不会发生阻塞。

3.套接字及类型
      socket(套接字)是网络通信的基本构件,是可以被命名和寻址的通信端点,使用中的每一个套接字都有与其类型和与之相连的进程。
      TCP/IP的socket提供三种类型的套接字:
      *SOCK_STREAM(流式套接字):提供一个面向连接的、可靠的数据传输服务,数据无差错、无重复、且按发送顺序接收。内设流量控制,避免数据流超限。数据被看作是字节流,无长度限制。
      *SOCK_DGRAM(数据报式套接字):提供一个无连接服务。数据报以独立包形式被发送,不提供无错保证。
     *SOCK_RAW(原始套接字):该接口允许比较低层协议。

你可能感兴趣的:(Windows网络程序设计基础知识拾掇(三))