Winsock - 1 - Winsock API

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,以此抵消
引用次数。

posted @ 2017-01-16 11:20  helo_blog  阅读(397)  评论(0编辑  收藏  举报