下载
第7章 Winsock基础
本章专门讲解编写成功网络应用程序时所需的基本知识和 A P I 调用。通过上一章的学习,
大家已知道从 Wi n s o c k 地址机和这些机器上的服务,可以很容易地访问协议。在这一章里,
我们打算讨论如何从网络上的一台机器到另一台机器建立连接,以及如何收发数据。为使问
题简单明了和免于重复,本章的讨论限定在 T C P / I P 协议的范围之内。但是,针对第 6章中讲
解的各个协议,本书配套光盘中包括了相应的客户机/服务器实例。需由具体协议决定的唯
一一种操作是套接字的建立。而另一方面,建立连接和收发数据所需的其余大多数 Wi n s o c k
调用都与基层的协议无关。而对某些例外的情况,在第 6章中,已在讨论各种协议时特地指
出。
对于接受连接、建立连接和收发数据所需的 Wi n s o c k调用,本章展示的例子有助于大家对
它们的理解。由于本章的目的是学习这些 Wi n s o c k 调用,因而我们举的例子均采用了直接的成
块Wi n s o c k调用。第8章则会展示Wi n s o c k可用的各种I / O模型,同时包括了示范代码。
除此以外,我们还打算在本章展示各种 A P I 函数的Winsock 1和Winsock 2版本。可通过前
缀W S A 来把这两个版本的函数区分开。若 Winsock 2在其规格中更新或增添了一个新的 A P I函
数,该函数名就会采用W S A 作为前缀。比如,建立套接字的 Winsock 1函数只简单称为s o c k e t,
而Winsock 2引入了该函数的新版本,名为 W S A S o c k e t,它可以使用Winsock 2中出现的某些
新特性。
7.1 Winsock的初始化
每个Wi n s o c k应用都必须加载Winsock DLL的相应版本。如果调用Wi n s o c k之前,没有加载
Wi n s o c k库,这个函数就会返回一个 S O C K E T _ E R R O R,错误信息是 W S A N O T I N I T I A L I S E D。
加载Wi n s o c k 库是通过调用W S A S t a r t u p函数实现的。这个函数的定义如下:
w Ve r s i o n R e q u e s t e d 参数用于指定准备加载的 Wi n s o c k库的版本。高位字节指定所需要的
Wi n s o c k库的副版本,而低位字节则是主版本。然后,可用宏 M A K E W O R D ( X , Y ) (其中,x是
高位字节,y是低位字节)方便地获得w Ve r s i o n R e q u e s t e d的正确值。
l p W S A D a t a参数是指向L P W S A D ATA结构的指针,W S A S t a r t u p 用其加载的库版本有关的
信息填在这个结构中: