Winsock
Winsock API
Winsock是网络编程接口,而不是协议。
网络原理和协议
建立Winsock规范的主要目的是提供一个与协议无关的传送接口。
Winsock将网络编程接口与具体协议解耦
协议的特征
- 面向消息
- 面向连接和无连接
- 可靠性和次序性
- 从容关闭
- 广播数据
- 多播数据
- 服务质量
- 部分消息
- 路由选择
面向消息
对每个离散写命令来说,如果传送协议把它们(而且只有它们)当做一条独立的消息在网上传送,我们就说该协议是面向消息。
面向消息:传送协议以独立的消息单元在网络上传输数据
第一次读取调用不会将这所有的三个数据包都返回,即使这些数据包已经收到也如此。这称为“保护消息边界”(preserving message boundaries)
多个消息间存在保护消息边界,每次读取不能返回多个消息。
无保护消息边界的协议通常称作“基于流的协议”
对发送端来说,意味着允许系统将原始消息分解成小消息或把
几条消息积累在一起,形成一个较大的数据包。对接收端来说,则是数据一到达网络堆栈,网络堆栈就开始读取它,并将它缓存下来等候进程处理。在进程请求处理大量数据时,系统会在不溢出为客户请求提供的缓冲区这一前提下,尽量返回更多的数据
基于流的协议不按照消息区分接收到的数据
面向连接和无连接
面向连接的服务中,进行数据交换之前,必须与通信方建立一条路径
这样既确定了通信方之间存在路由,又保证了通信双方都是活动的、都可彼此响应,但其特点是在通信双方之间建立一个通信信道需
要很多开支而无连接协议却不保证接收端是否正在收听
面向连接一方面要保证链路存在,二要确定对方是活动的,可彼此响应,相当于建立了一个通信约定
广播数据
广播数据即数据从一个工作站发出,局域网内的其他所有工作站都能收到它。
这一特征适用于无连接协议,因为LAN上的所有机器都可获得并处理广播消息。
使用广播消息的不利之处是每台机器都必须对该消息进行处理。比如,一用户在LAN上广播一条消息,每台机器上的网卡都会收到这条消息,并把它上传到网络堆栈。然后,堆栈将这条消息在所有的网络应用中循环,看它们是否应该接收这条消息。
- 广播是针对局域网中所有设备;
- 广播适用于无连接协议;
多播数据
I P协议下,多播是广播的一种变形。
I P多播要求对收发数据感兴趣的所有主机加入一个特定的组。进程希望加入多播组时,网卡上会增添一个过滤器,这样,只有绑定组地址的数据才会被网络硬件捡起,并上传到网络堆栈进行恰当处理。
- 多播是针对特定的组成员
Winsock支持的协议
Wi n 3 2平台提供的最有用的特征之一是能够同步支持多种不同的网络协议。
- IP
- IPX/SPX
- NetBIOS
- AppleTalk
- ATM
- 红外线套接字
Winsock2协议信息
-
如何获取系统中安装的网络协议信息?
WSAEnumProtocols要想获得系统中安装的网络协议的相关信息,调用这个函数W S A E n u m P r o t o c o l s即可
-
如何加载Winsock库?
在可以调用一个Wi n s o c k函数之前,必须先加载一个版本正确的Wi n s o c k库。Winsock启动例程是W S A S t a r t u p
在结束Wi n s o c k库,而且不再需要调用任何Wi n s o c k函数时,附带例程会卸载这个库,
并释放资源。这个函数的定义是:
int WSACleanup (void);
记住,每次调用W S A S t a r t u p,都需要调用相应的W S A C l e a n u p,因为每次启动调用都
会增加对加载Winsock DLL的引用次数,它要求调用同样多次的W S A C l e a n u p,以此抵消
引用次数。