《Windows网络编程 2》读书笔记(一)

来源:互联网 发布:js获取base64文件大小 编辑:程序博客网 时间:2024/05/16 10:38

Window的网络编程主要是利用WinSock,这是一种标准的API,注意它是编程接口,而不是网络协议。目前已经有两个版本WinSock1和WinSock2。在实际使用时必须包含相应的头文件和库,前者是Winsock.h, MSWsock.h/MSWsock.dll以及WSock32.lib,后者用Winsock2.h及WS2_32.LIB。

 

如果不想设置包含关系,可以在程序里面加上以下:

 

#pragma comment(lib, "ws2_32.lib")

 

使用WinSock之前必须初始化库,结束必须清理,以下是一个框架:

 

 

IP地址在WinSock中用SOCKADDR_IN结构体来描述。不同的计算机采用ig-endian和little-endian形式进行编号,例如Intel86处理器上,多字节编号用little-endian形式表示,即字节的排序是从最无意义的字节到最有意义的字节。

  • 在计算机中把Ip地址和端口号指定成多字节时,是按主机字节(host-byte)顺序表示;
  • 在网络上指定IP地址和端口号时指定多字节时,必须用big-endian形式,即网络字节(network-byte)顺序,也即从最有意义字节开始。

 因此,在设置IP地址时,需要进行一下字节转换。有许多API函数可以用于此作用:

下面是将一个数从host-byte转换成network-byte:     htonl, WSAHtonl,  htons, WSAHtons

下面是逆向转换的:ntohl, ntohs, WSANtohl, WSANtohs

 

 下面一段代码是演示如何绑定IP地址:

 

创建套接字:在Windows中,套接字与文件描述符不是一回事,是一个独立的类型,即SOCKET类型,其创建方法有两个函数:socket和WSASocket。

Socket socket(int af, int type, int protocol)

其中af设为AF_INET,type的类型对于Tcp来说是SOCK_STREAM,对于uDP来说是SOCK_DGRAM。Protocol的取值也有两个:IPPROTO_TCP或IPPROTO_UDP。

 

创建后,即要将端口与IP地址及端口绑定,可以用bind函数。

 

以下图形比较好的描述了通信双方的实现流程:

WinSOCK服务器和客户端模型

 

整体来说,第一章就是介绍了利用WinSOCK编程常用的一些API函数,这部分内容查阅MSDN即可。