📄 cwsbook.txt
字号:
Windows Sockets 规范及应用
-Windows网络编程接口
施 炜 李 铮 秦 颍 编著
***************************************************************
***
版权信息
本书作者保留所有版权。禁止任何商业性的转载或复制。非赢利性
质的转载和复制不得修改文章内容,并请保留此段文字。
Copyright (c) 1995-1996 By 施炜,李铮,秦颖
All Right Reserved
***************************************************************
***
内容提要
本书适应了Windows、Internet及计算机网络普及的潮流,介绍了一套在Windows
下网络编程的规范-Windows Sockets。这套规范是Windows下得到广泛应用的、开
放的、支持多种协议的网络编程接口。从1991年的1.0版到1995年的2.0.8版,经
过不断完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,
已成为Windows网络编程的事实上的标准。为使读者能够充分理解和应用这套规
范,本书不但对Windows Sockets 1.1及2.0规范作了较为详尽的介绍,还结合了作
者的实际工作,给出了具有实际应用价值的程序实例。书中的内容包括:Windows
Sockets规范1.1版及2.0.8版介绍;Windows Sockets网络编程指导和具体应用实例;
Windows Sockets规范1.1版及2.0.8版库函数参考等。
本书体系完整,文字流畅,可供从事网络应用开发的工程技术人员和大专院校
师生参考。
作者声明
由于成书时间紧迫。本书不免有许多错误和不当之处,故此作者衷心希望各位
读者能对本书提出宝贵意见(包括补充新的应用实例和内容),以便我们进一步修
改完善此书。我们会尊重相应修订者的版权。作者也衷心希望在我们和各位读者的
努力下,本书能够成为一本关于Windows Sockets编程的系统而又准确的免费中文参
考书,为广大读者在Windows下网络编程提供帮助。
作者联系地址:
施炜:上海交通大学94032班 (200030)
Email: weishi@fudan.ihep.ac.cn
李铮:上海交通大学自动化系 (200030)
Email: blee.bbs@captain.net.tsinghua.edu.cn
秦颖:上海交通大学94033A班 (200030)
Email: fluke.bbs@captain.net.tsinghua.edu.cn
作者希望每一位拿到本书的读者能以任何方式通知我们。以便我们掌握本书的
应用情况。并敬请各位读者暂时不要在其他FTP站点散发,谢谢合作。
编著者
1996年5月20日
前言
当今世界正处于信息时代,计算机和通信网络是这一时代所谓“信息基础设
施”。网络化是计算机技术九十年代的重要发展趋势之一。目前计算机网络的新发
展是:异机种网络和异网互联有较大突破。TCP/IP协议在异网互联中体现出了其强
大的生命力,以它为基础组建的Internet是目前国际上规模最大的计算机网间网,到
1991年底世界上已有26个国家的五千多个网络连入Internet,其中包含了数千个组
织的30万台主机,用户数以百万计。
与计算机网络的普及相呼应的是Windows的广泛应用,现在在全世界各地已有
超过四千万用户在使用不同版本的Windows。自1995年8月24日Windows 95正式
推出以来,在短短的一个星期内销售量已超过100万份,有的零售商店不得不半夜
开门,以迎接滚滚而来的抢购者。这说明以用户友好的图形界面为基础的Windows
已得到用户的普遍认可,已经并将继续成为个人机平台上的事实上的操作系统标
准。所以研究和开发在Windows下的网络编程技术具有普遍的应用价值。
在Windows下的各种网络编程接口中,Windows Sockets脱颖而出,越来越得到
大家的重视,这是因为Windows Sockets规范是一套开放的、支持多种协议的
Windows下的网络编程接口。从1991年的1.0版到1995年的2.0.8版,经过不断完
善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成为
Windows网络编程的事实上的标准。
在作者利用Windows Sockets规范进行应用开发的过程中,发现这方面的资料很
少,特别是缺乏一本全面而实用的专著。为了使广大用户能够充分理解和应用这套
规范,我们编写了这本书。本书不但对Windows Sockets 1.1及2.0规范作了较为详
尽的介绍,还结合了作者的实际工作,给出了具有实际应用价值的程序实例。希望
它能对Windows Sockets规范在国内的推广和应用起到抛砖引玉的作用。读者在阅读
本书的过程中,如果能对自己的学习工作有所帮助和指导,是作者的最大愿望。由
于时间紧迫,作者学识有限,书中错误在所难免,偏颇和不当之处,恳请读者不吝
赐教。
本书由施炜、李铮、秦颖合作完成,其中,第一、二、四、六章和5.2节由施
炜编写;第七章、5.1节、3.4节由李铮编写;第5.3节、3.1-3.3节由秦颖编写。在
本书的编写过程中,得到了上海交通大学的毛向辉先生的大力支持,并提供了一些
最新的资料,在此谨表示衷心的谢意。
编著者
1995年9月于上海交通大学
目录
第一章 简介 11
1.1 什么是WINDOWS SOCKETS规范? 11
1.2 BEKELEY套接口 12
1.3 MICROSOFT WINDOWS和针对WINDOWS的扩展 13
1.4 这份规范的地位 13
1.5 曾经作过的修改 13
1.5.1 Windows Sockets 1.0 13
1.5.2 Windows Sockets 1.1 13
第二章 使用WINDOWS SOCKETS 1.1编程 15
2.1 WINDOWS SOCKETS协议栈安装检查 15
2.2 套接口 15
2.2.1 基本概念 15
2.2.2 客户机/服务器模型 16
2.2.3 带外数据 17
2.2.4 广播 17
2.3 字节顺序 18
2.4 套接口属性选项 18
2.5 数据库文件 19
2.6 与BERKELEY套接口的不同 20
2.6.1 套接口数据类型和错误数值 20
2.6.2 select()函数和FD_*宏 20
2.6.3 错误代码-errno,h_errno,WSAGetLastError() 21
2.6.4 指针 21
2.6.5 重命名的函数 22
2.6.5.1 close()和closesocket() 22
2.6.5.2 ioctl()和iooctlsocket() 22
2.6.6 阻塞例程和EINPROGRESS宏 22
2.6.7 Windows Sockets支持的最大套接口数目 22
2.6.8 头文件 23
2.6.9 API调用失败时的返回值 23
2.6.10 原始套接口 23
2.7 在多线程WINDOWS版本中的WINDOWS SOCKETS 24
第三章 WINDOWS SOCKETS 1.1应用实例 25
3.1 套接口网络编程原理 25
3.2 WINDOWS SOCKETS编程原理 27
3.3 WINDOWS SOCKETS与UNIX套接口编程实例 28
3.3.1 SERVER介绍 28
3.3.2 CLIENT介绍 29
3.3.3 源程序清单 30
3.4 另一个精巧的应用程序实例-WSHOUT 37
3.4.1 源程序目录 38
3.4.2 程序逻辑结构 38
3.4.3 源程序清单及注释 39
3.4.3.1 wshout.c清单 39
3.4.3.2 wshout.h清单 53
3.4.3.3 wshout.rc清单 55
3.4.3.4 ushout.c清单 60
3.4.3.5 ulisten.c清单 63
3.4.3.6 tshout.c清单 66
3.4.3.7 tlisten.c清单 69
3.4.3.8 errno.c清单 73
3.4.3.9 resolve.c清单 74
第四章 WINDOWS SOCKET 1.1库函数概览 79
4.1 套接口函数 79
4.1.1 阻塞/非阻塞和数据易失性 80
4.2 数据库函数 81
4.3 针对MICROSOFT WINDOWS的扩展函数 82
4.3.1 异步选择机制 83
4.3.2 异步支持例程 83
4.3.3 阻塞钩子函数方法 83
4.3.4 错误处理 84
4.3.5 通过中介DLL调用Windows Sockets DLL 84
4.3.6 Windows Sockets实现内部对消息的使用 85
4.3.7 私有的API接口 85
第五章 套接口库函数参考 86
5.1 WINDOWS SOCKET 1.1库函数参考 86
5.1.1 accept() 86
5.1.2 bind() 87
5.1.3 closesocket() 89
5.1.4 connect() 90
5.1.5 getpeername() 92
5.1.6 getsockname() 93
5.1.7 getsockopt() 94
5.1.8 htonl() 95
5.1.9 htons() 96
5.1.10 inet_addr() 96
5.1.11 inet_ntoa() 97
5.1.12 ioctlsocket() 98
5.1.13 listen() 99
5.1.14 ntohl() 101
5.1.15 ntohs() 101
5.1.16 recv() 102
5.1.17 recvfrom() 103
5.1.18 select() 105
5.1.19 send() 107
5.1.20 sendto() 108
5.1.21 setsockopt() 110
5.1.22 shutdown() 112
5.1.23 socket() 114
5.2 数据库函数 115
5.2.1 gethostbyaddr() 115
5.2.2 gethostbyname() 116
5.2.3 gethostname() 117
5.2.4 getprotobyname() 118
5.2.5 getprotobynumber() 119
5.2.6 getservbyname() 120
5.2.7 getservbyport() 122
5.3 WINDOWS扩展函数 122
5.3.1 WSAAsyncGetHostByAddr() 123
5.3.2 WSAAsyncGetHostByName() 125
5.3.3 WSAAsyncGetProtoByName() 126
5.3.4 WSAAsyncGetProtoByNumber() 128
5.3.5 WSAAsyncGetServByName() 130
5.3.6 WSAAsyncGetServByPort() 132
5.3.7 WSAAsyncSelect() 134
5.3.8 WSACancelAsyncRequest() 139
5.3.9 WSACancelBlockingCall() 140
5.3.10 WSACleanup() 141
5.3.11 WSAGetLastError() 142
5.3.12 WSAIsBlocking() 143
5.3.13 WSASetBlockingHook() 143
5.3.14 WSASetLastError() 145
5.3.15 WSAStartup() 146
5.3.16 WSAUnhookBlockingHook() 150
第六章 WINDOWS SOCKET 2的扩展特性 152
6.1 同时使用多个传输协议 152
6.2 与WINDOWS SOCKET 1.1应用程序的向后兼容性 153
6.2.1 源码的兼容性 153
6.2.2 二进制兼容性 153
6.3 在WINDOWS SOCKETS中注册传输协议 154
6.3.1 使用多个协议 154
6.3.2 select()函数应用中关于多个服务提供者的限制 155
6.4 协议无关的名字解析 155
6.5 重叠I/O和事件对象 156
6.5.1 事件对象 156
6.5.2 接收操作完成指示 157
6.5.2.1 阻塞并且等待完成指示。 157
6.5.2.2 检查完成指示 157
6.5.2.3 使用套接口I/O操作完成例程 157
6.5.3 WSAOVERLAPPED的细节 158
6.6 使用事件对象异步通知 159
6.7 服务的质量(QOS) 159
6.8 套接口组 160
6.9 共享套接口 160
6.10 连接建立和拆除的高级函数 161
6.11 扩展的字节顺序转换例程 162
6.12 分散/聚集方式I/O 162
6.13 协议无关的多点通讯 162
6.14 新增套接口选项一览 163
6.15 新增套接口IOCTL操作代码 163
6.16 新增函数一览 164
第七章 WINDOWS SOCKETS 2扩展库函数简要参考 166
7.1 WSAACCEPT() 166
7.2 WSACLOSEEVENT() 167
7.3 WSACONNECT() 167
7.4 WSACREATEEVENT() 169
7.5 WSADUPLICATESOCKET() 170
7.6 WSAENUMNETWORKEVENTS() 171
7.7 WSAENUMPROTOCOLS() 171
7.8 WSAEVENTSELECT() 172
7.9 WSAGETOVERLAPPEDRESULT() 174
7.10 WSAGETQOSBYNAME() 175
7.11 WSAHTONL() 175
7.12 WSAHTONS() 176
7.13 WSAIOCTL() 176
7.14 WSAJOINLEAF() 177
7.15 WSANTOHL() 179
7.16 WSANTOHS() 179
7.17 WSARECV() 180
7.18 WSARECVDISCONNECT() 181
7.19 WSARECVFROM() 182
7.20 WSARESETEVENT() 184
7.21 WSASEND() 184
7.22 WSASENDDISCONNECT() 186
7.23 WSASENDTO() 186
7.24 WSASETEVENT() 188
7.25 WSASOCKET() 189
7.26 WSAWAITFORMULTIPLEEVENTS() 190
附录A 错误代码 192
附录B WINDOWS SOCKETS头文件 196
附录B.1 WINDOWS SOCKETS 1.1头文件 196
附录B.2 WINDOWS SOCKETS 2头文件 217
附录B.3 WINSOCK.DEF文件 252
附录C 参考文献 255
第一章 简介
1.1 什么是Windows Sockets规范?
Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范
例定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的
Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程
序员能充分地利用Windows消息驱动机制进行编程。
Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各
家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows
Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的
应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因
此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套
库函数调用和相关语义。
遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容
的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。
一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现
Windows Sockets兼容。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -