?? cwsbook.txt
字號:
Windows Sockets 規(guī)范及應(yīng)用
-Windows網(wǎng)絡(luò)編程接口
施 煒 李 錚 秦 潁 編著
***************************************************************
***
版權(quán)信息
本書作者保留所有版權(quán)。禁止任何商業(yè)性的轉(zhuǎn)載或復(fù)制。非贏利性
質(zhì)的轉(zhuǎn)載和復(fù)制不得修改文章內(nèi)容,并請保留此段文字。
Copyright (c) 1995-1996 By 施煒,李錚,秦穎
All Right Reserved
***************************************************************
***
內(nèi)容提要
本書適應(yīng)了Windows、Internet及計算機網(wǎng)絡(luò)普及的潮流,介紹了一套在Windows
下網(wǎng)絡(luò)編程的規(guī)范-Windows Sockets。這套規(guī)范是Windows下得到廣泛應(yīng)用的、開
放的、支持多種協(xié)議的網(wǎng)絡(luò)編程接口。從1991年的1.0版到1995年的2.0.8版,經(jīng)
過不斷完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,
已成為Windows網(wǎng)絡(luò)編程的事實上的標(biāo)準(zhǔn)。為使讀者能夠充分理解和應(yīng)用這套規(guī)
范,本書不但對Windows Sockets 1.1及2.0規(guī)范作了較為詳盡的介紹,還結(jié)合了作
者的實際工作,給出了具有實際應(yīng)用價值的程序?qū)嵗械膬?nèi)容包括:Windows
Sockets規(guī)范1.1版及2.0.8版介紹;Windows Sockets網(wǎng)絡(luò)編程指導(dǎo)和具體應(yīng)用實例;
Windows Sockets規(guī)范1.1版及2.0.8版庫函數(shù)參考等。
本書體系完整,文字流暢,可供從事網(wǎng)絡(luò)應(yīng)用開發(fā)的工程技術(shù)人員和大專院校
師生參考。
作者聲明
由于成書時間緊迫。本書不免有許多錯誤和不當(dāng)之處,故此作者衷心希望各位
讀者能對本書提出寶貴意見(包括補充新的應(yīng)用實例和內(nèi)容),以便我們進一步修
改完善此書。我們會尊重相應(yīng)修訂者的版權(quán)。作者也衷心希望在我們和各位讀者的
努力下,本書能夠成為一本關(guān)于Windows Sockets編程的系統(tǒng)而又準(zhǔn)確的免費中文參
考書,為廣大讀者在Windows下網(wǎng)絡(luò)編程提供幫助。
作者聯(lián)系地址:
施煒:上海交通大學(xué)94032班 (200030)
Email: weishi@fudan.ihep.ac.cn
李錚:上海交通大學(xué)自動化系 (200030)
Email: blee.bbs@captain.net.tsinghua.edu.cn
秦穎:上海交通大學(xué)94033A班 (200030)
Email: fluke.bbs@captain.net.tsinghua.edu.cn
作者希望每一位拿到本書的讀者能以任何方式通知我們。以便我們掌握本書的
應(yīng)用情況。并敬請各位讀者暫時不要在其他FTP站點散發(fā),謝謝合作。
編著者
1996年5月20日
前言
當(dāng)今世界正處于信息時代,計算機和通信網(wǎng)絡(luò)是這一時代所謂“信息基礎(chǔ)設(shè)
施”。網(wǎng)絡(luò)化是計算機技術(shù)九十年代的重要發(fā)展趨勢之一。目前計算機網(wǎng)絡(luò)的新發(fā)
展是:異機種網(wǎng)絡(luò)和異網(wǎng)互聯(lián)有較大突破。TCP/IP協(xié)議在異網(wǎng)互聯(lián)中體現(xiàn)出了其強
大的生命力,以它為基礎(chǔ)組建的Internet是目前國際上規(guī)模最大的計算機網(wǎng)間網(wǎng),到
1991年底世界上已有26個國家的五千多個網(wǎng)絡(luò)連入Internet,其中包含了數(shù)千個組
織的30萬臺主機,用戶數(shù)以百萬計。
與計算機網(wǎng)絡(luò)的普及相呼應(yīng)的是Windows的廣泛應(yīng)用,現(xiàn)在在全世界各地已有
超過四千萬用戶在使用不同版本的Windows。自1995年8月24日Windows 95正式
推出以來,在短短的一個星期內(nèi)銷售量已超過100萬份,有的零售商店不得不半夜
開門,以迎接滾滾而來的搶購者。這說明以用戶友好的圖形界面為基礎(chǔ)的Windows
已得到用戶的普遍認(rèn)可,已經(jīng)并將繼續(xù)成為個人機平臺上的事實上的操作系統(tǒng)標(biāo)
準(zhǔn)。所以研究和開發(fā)在Windows下的網(wǎng)絡(luò)編程技術(shù)具有普遍的應(yīng)用價值。
在Windows下的各種網(wǎng)絡(luò)編程接口中,Windows Sockets脫穎而出,越來越得到
大家的重視,這是因為Windows Sockets規(guī)范是一套開放的、支持多種協(xié)議的
Windows下的網(wǎng)絡(luò)編程接口。從1991年的1.0版到1995年的2.0.8版,經(jīng)過不斷完
善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成為
Windows網(wǎng)絡(luò)編程的事實上的標(biāo)準(zhǔn)。
在作者利用Windows Sockets規(guī)范進行應(yīng)用開發(fā)的過程中,發(fā)現(xiàn)這方面的資料很
少,特別是缺乏一本全面而實用的專著。為了使廣大用戶能夠充分理解和應(yīng)用這套
規(guī)范,我們編寫了這本書。本書不但對Windows Sockets 1.1及2.0規(guī)范作了較為詳
盡的介紹,還結(jié)合了作者的實際工作,給出了具有實際應(yīng)用價值的程序?qū)嵗OM?它能對Windows Sockets規(guī)范在國內(nèi)的推廣和應(yīng)用起到拋磚引玉的作用。讀者在閱讀
本書的過程中,如果能對自己的學(xué)習(xí)工作有所幫助和指導(dǎo),是作者的最大愿望。由
于時間緊迫,作者學(xué)識有限,書中錯誤在所難免,偏頗和不當(dāng)之處,懇請讀者不吝
賜教。
本書由施煒、李錚、秦穎合作完成,其中,第一、二、四、六章和5.2節(jié)由施
煒編寫;第七章、5.1節(jié)、3.4節(jié)由李錚編寫;第5.3節(jié)、3.1-3.3節(jié)由秦穎編寫。在
本書的編寫過程中,得到了上海交通大學(xué)的毛向輝先生的大力支持,并提供了一些
最新的資料,在此謹(jǐn)表示衷心的謝意。
編著者
1995年9月于上海交通大學(xué)
目錄
第一章 簡介 11
1.1 什么是WINDOWS SOCKETS規(guī)范? 11
1.2 BEKELEY套接口 12
1.3 MICROSOFT WINDOWS和針對WINDOWS的擴展 13
1.4 這份規(guī)范的地位 13
1.5 曾經(jīng)作過的修改 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協(xié)議棧安裝檢查 15
2.2 套接口 15
2.2.1 基本概念 15
2.2.2 客戶機/服務(wù)器模型 16
2.2.3 帶外數(shù)據(jù) 17
2.2.4 廣播 17
2.3 字節(jié)順序 18
2.4 套接口屬性選項 18
2.5 數(shù)據(jù)庫文件 19
2.6 與BERKELEY套接口的不同 20
2.6.1 套接口數(shù)據(jù)類型和錯誤數(shù)值 20
2.6.2 select()函數(shù)和FD_*宏 20
2.6.3 錯誤代碼-errno,h_errno,WSAGetLastError() 21
2.6.4 指針 21
2.6.5 重命名的函數(shù) 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支持的最大套接口數(shù)目 22
2.6.8 頭文件 23
2.6.9 API調(diào)用失敗時的返回值 23
2.6.10 原始套接口 23
2.7 在多線程WINDOWS版本中的WINDOWS SOCKETS 24
第三章 WINDOWS SOCKETS 1.1應(yīng)用實例 25
3.1 套接口網(wǎng)絡(luò)編程原理 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 另一個精巧的應(yīng)用程序?qū)嵗璚SHOUT 37
3.4.1 源程序目錄 38
3.4.2 程序邏輯結(jié)構(gòu) 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庫函數(shù)概覽 79
4.1 套接口函數(shù) 79
4.1.1 阻塞/非阻塞和數(shù)據(jù)易失性 80
4.2 數(shù)據(jù)庫函數(shù) 81
4.3 針對MICROSOFT WINDOWS的擴展函數(shù) 82
4.3.1 異步選擇機制 83
4.3.2 異步支持例程 83
4.3.3 阻塞鉤子函數(shù)方法 83
4.3.4 錯誤處理 84
4.3.5 通過中介DLL調(diào)用Windows Sockets DLL 84
4.3.6 Windows Sockets實現(xiàn)內(nèi)部對消息的使用 85
4.3.7 私有的API接口 85
第五章 套接口庫函數(shù)參考 86
5.1 WINDOWS SOCKET 1.1庫函數(shù)參考 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 數(shù)據(jù)庫函數(shù) 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擴展函數(shù) 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 同時使用多個傳輸協(xié)議 152
6.2 與WINDOWS SOCKET 1.1應(yīng)用程序的向后兼容性 153
6.2.1 源碼的兼容性 153
6.2.2 二進制兼容性 153
6.3 在WINDOWS SOCKETS中注冊傳輸協(xié)議 154
6.3.1 使用多個協(xié)議 154
6.3.2 select()函數(shù)應(yīng)用中關(guān)于多個服務(wù)提供者的限制 155
6.4 協(xié)議無關(guān)的名字解析 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的細(xì)節(jié) 158
6.6 使用事件對象異步通知 159
6.7 服務(wù)的質(zhì)量(QOS) 159
6.8 套接口組 160
6.9 共享套接口 160
6.10 連接建立和拆除的高級函數(shù) 161
6.11 擴展的字節(jié)順序轉(zhuǎn)換例程 162
6.12 分散/聚集方式I/O 162
6.13 協(xié)議無關(guān)的多點通訊 162
6.14 新增套接口選項一覽 163
6.15 新增套接口IOCTL操作代碼 163
6.16 新增函數(shù)一覽 164
第七章 WINDOWS SOCKETS 2擴展庫函數(shù)簡要參考 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 參考文獻(xiàn) 255
第一章 簡介
1.1 什么是Windows Sockets規(guī)范?
Windows Sockets規(guī)范以U.C. Berkeley大學(xué)BSD UNIX中流行的Socket接口為范
例定義了一套Micosoft Windows下網(wǎng)絡(luò)編程接口。它不僅包含了人們所熟悉的
Berkeley Socket風(fēng)格的庫函數(shù);也包含了一組針對Windows的擴展庫函數(shù),以使程
序員能充分地利用Windows消息驅(qū)動機制進行編程。
Windows Sockets規(guī)范本意在于提供給應(yīng)用程序開發(fā)者一套簡單的API,并讓各
家網(wǎng)絡(luò)軟件供應(yīng)商共同遵守。此外,在一個特定版本W(wǎng)indows的基礎(chǔ)上,Windows
Sockets也定義了一個二進制接口(ABI),以此來保證應(yīng)用Windows Sockets API的
應(yīng)用程序能夠在任何網(wǎng)絡(luò)軟件供應(yīng)商的符合Windows Sockets協(xié)議的實現(xiàn)上工作。因
此這份規(guī)范定義了應(yīng)用程序開發(fā)者能夠使用,并且網(wǎng)絡(luò)軟件供應(yīng)商能夠?qū)崿F(xiàn)的一套
庫函數(shù)調(diào)用和相關(guān)語義。
遵守這套Windows Sockets規(guī)范的網(wǎng)絡(luò)軟件,我們稱之為Windows Sockets兼容
的,而Windows Sockets兼容實現(xiàn)的提供者,我們稱之為Windows Sockets提供者。
一個網(wǎng)絡(luò)軟件供應(yīng)商必須百分之百地實現(xiàn)Windows Sockets規(guī)范才能做到現(xiàn)
Windows Sockets兼容。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -