《Windows Sockets网络编程》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(美)BobQuinn,DaveShute著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2012
  • ISBN:9787111392743
  • 页数:424 页
图书介绍:本书对Windows Sockets的概念、网络应用程序的工作机制、网络操作的3种工作模式以及TCP和UDP 客户与服务器的工作流程等都有很生动详细的讲解。重点介绍适用于任何WinSock实现的应用程序设计,强调不同WinSock DLL的之间的差异,以及网络应用程序开发中的其他陷阱和隐患,展示了避免这些问题的方法。

第1章 Windows Sockets概述 1

1.1什么是Windows Sockets 2

1.2 Windows Sockets的发展历史 3

1.3 Windows Sockets的优势 4

1.3.1 Windows Sockets是一个开放的标准 4

1.3.2 Windows Sockets提供源代码可移植性 4

1.3.3 Windows Sockets支持动态链接 5

1.3.4 Windows Sockets的优点 6

1.4 Windows Sockets的前景 7

1.5结论 7

第2章 Windows Sockets的概念 9

2.1 OSI网络模型 9

2.2 WinSock网络模型 11

2.2.1信息与数据 12

2.2.2应用协议 12

2.3 WinSock中的OSI层次 12

2.3.1应用层 13

2.3.2表示层 14

2.3.3会话层 14

2.3.4传输层 15

2.3.5网络层 16

2.3.6数据链路层 17

2.3.7物理层 17

2.4模块化的层次框 18

2.5服务和协议 19

2.6协议和API 21

第3章 TCP/IP协议服务 23

3.1什么是TCP/IP 23

3.2 TCP/IP的发展历史 25

3.3传输服务 26

3.3.1无连接的服务:UDP 26

3.3.2面向连接的服务:TCP 28

3.3.3传输协议的选择:UDP与TCP的对比 29

3.4网络服务 30

3.4.1 IP服务 30

3.4.2 ICMP服务 31

3.5支持协议和服务 32

3.5.1域名服务 32

3.5.2地址解析协议 33

3.5.3其他支持协议 33

3.6 TCP/IP的发展前景 34

第4章 网络应用程序工作机制 35

4.1客户端-服务器模型 35

4.2网络程序概览 37

4.3 socket的打开 37

4.4 socket的命名 39

4.4.1 sockaddr结构 40

4.4.2 sockaddr_in结构 40

4.4.3端口号 41

4.4.4本地IP地址 41

4.4.5什么是socket名称 42

4.4.6客户端socket名称是可选的 42

4.5与另一个socket建立关联 43

4.5.1服务器如何准备建立关联 44

4.5.2客户端如何发起一个关联 45

4.5.3服务器如何完成一个关联 47

4.6 socket之间的发送与接收 48

4.6.1在“已连接的”socket上发送数据 48

4.6.2在“无连接的”socket上发送数据 49

4.6.3接收数据 50

4.6.4 socket解复用器中的关联 51

4.7 socket的关闭 52

4.7.1 closesocket() 52

4.7.2 shutdown() 53

4.8客户端和服务器概览 54

第5章 操作模式 56

5.1什么是操作模式 57

5.1.1不挂机,等待:阻塞 57

5.1.2挂机后再拨:非阻塞 57

5.1.3请求对方回拨:异步 58

5.2阻塞模式 58

5.2.1阻塞socket 58

5.2.2阻塞函数 59

5.2.3伪阻塞的问题 59

5.2.4阻塞钩子函数 60

5.2.5阻塞情境 61

5.2.6撤销阻塞操作 62

5.2.7阻塞操作中的超时 64

5.2.8无最少接收限制值 65

5.2.9代码示例 65

5.3非阻塞模式 67

5.3.1怎样使socket成为非阻塞的 68

5.3.2成功与失败不是绝对的 68

5.3.3探询而非阻塞 69

5.3.4显式地避让 69

5.3.5代码示例 70

5.4异步模式 72

5.4.1认识异步函数 73

5.4.2撤销异步操作 74

5.4.3代码示例 74

5.4.4 AU_ime应用 76

5.5性能比较 85

5.6平台比较 86

5.7真正的阻塞 86

5.7.1线程化的应用程序 86

5.7.2其他适用性说明 87

第6章 socket状态 88

6.1什么是socket状态 88

6.1.1数据报socket的状态 89

6.1.2流socket的状态 90

6.2 socket状态的检测方法 91

6.2.1根据函数调用的成功或失败检测 92

6.2.2同步检测 93

6.2.3异步检测 93

6.3 WSAAsyncSelect() 93

6.3.1 WSAAsyncSelect()的工作原理 94

6.3.2什么是WSAAsyncSelect ()事件 96

6.3.3避免机会丢失的窗口 96

6.3.4什么是重使能函数 97

6.3.5什么是通知消息 98

6.3.6为函数失败做好准备 98

6.3.7在响应时设置循环 99

6.3.8撤销异步通知 99

6.3.9事件描述 99

6.3.10 AS_ Echo应用程序 102

6.4 select() 115

6.4.1怎样使用select() 116

6.4.2 select()的宏 117

6.4.3 select()的输入参数 118

6.4.4不要把select()作为定时器 120

6.4.5注意0超时 120

6.4.6代码示例 120

6.5查看数据 122

6.5.1 ioctlsocket() FIONREAD命令 122

6.5.2带有MSG PEEK标志的recv () 122

6.6带外数据 123

6.6.1 TCP的局限 124

6.6.2 ioctlsocket()函数和SIOCATMARK命令 125

6.6.3代码示例 125

6.7监听状态 126

第7章 应用程序和函数实例库 127

7.1 FTP客户端实例 127

7.1.1文件传输协议概述 128

7.1.2 FTP有限状态机 130

7.1.3 AC_FTP应用程序 132

7.1.4操作中的AC_FTP 168

7.2函数实例库 169

7.2.1 CenterWnd() 170

7.2.2 CloseConn () 171

7.2.3 CreateLelFile() 172

7.2.4 Dlg_About() 173

7.2.5 GetAddr() 174

7.2.6 GetBuf () 175

7.2.7 GetHostID() 176

7.2.8 GetLcIDir() 177

7.2.9 GetPort () 179

7.2.10 WSAErrStr() 179

7.2.11 WSAperror() 180

7.3 WinSockx.h 182

7.3.1 Globals.c 183

7.3.2 WSA_ Xtra.h 184

第8章 主机名称与主机地址 187

8.1主机名称与主机地址解析 187

8.1.1 hostent结构 188

8.1.2主机名称解析 189

8.1.3地址解析 195

8.2主机表、域名系统和网络信息服务 198

8.2.1主机表 198

8.2.2域名系统 198

8.2.3网络信息服务 199

8.3本地主机信息 200

8.4网络地址与格式化 201

8.4.1 in addr结构 201

8.4.2 inet addr() 202

8.4.3 inet ntoa() 203

8.5协议族与地址族 204

第9章 socket信息与控制 205

9.1 socket控制 205

9.1.1 FIONBIO 206

9.1.2 FIONREAD 207

9.1.3 SIOCATMARK 208

9.1.4其他控制命令 208

9.2 socket选项 209

9.2.1 getsockopt()与setsockopt() 209

9.2.2 SO_ ACCEPTCONN 211

9.2.3 SO_ BROADCAST 211

9.2.4 SO DEBUG 212

9.2.5 SO_ DONTLINGER 213

9.2.6 SO_ DONTROUTE 213

9.2.7 SO_ ERROR 214

9.2.8 SO_KEEPALIVE 214

9.2.9 SO_LINGER 216

9.2.10 SO_ OOBINLINE 218

9.2.11 SO RCVBUF与SO_SNDBUF 218

9.2.12 SO_REUSEADDR 219

9.2.13 SO TYPE 219

9.2.14 TCP_NODELAY 220

9.2.15 不支持的选项 221

9.2.16未来会使用的选项 222

9.3阻塞钩子 222

9.3.1 WSASetBlockingHook() 222

9.3.2 WSAUnhookBlockingHook() 223

9.3.3阻塞钩子函数 223

9.3.4阻塞状态 224

9.4 socket名称 224

9.4.1 getsockname() 225

9.4.2 getpeernaame () 226

第10章 支持例程 228

10.1启动与清除 228

10.1.1 WSAStartup() 228

10.1.2 WSACleanup() 234

10.2字节顺序 234

10.3服务名称与端口号 236

10.3.1 servent结构 236

10.3.2服务解析 237

10.3.3端口解析 240

10.3.4服务数据库 241

10.4协议名称与协议号 242

10.4.1 protoent结构 243

10.4.2协议名称解析 243

10.4.3协议号解析 247

10.4.4协议数据库 247

10.5报错 248

10.5.1 WSAGetLastError() 248

10.5.2 WSASetLastError() 249

10.5.3错误文本显示 249

第11章 WinSock上的DLL 250

11.1创建一个新的API 250

11.1.1仿真的API 251

11.1.2应用协议API 252

11.1.3封装的WinSock API 252

11.2 DLL的问题 253

11.2.1重入 254

11.2.2任务管理 255

11.2.3与WinSock DLL的链接 256

11.3 DLL实例 256

11.3.1 WSASimpl应用程序 257

11.3.2 WSASimpl DLL 258

第12章 移植BSD Sockets 272

12.1 Windows Sockets与Berkeley Sockets的差异 272

12.1.1 socket不是文件句柄 273

12.1.2 signal()不可用 274

12.1.3域名不可用 275

12.1.4地址信息和操作不可用 275

12.1.5 syslog()不可用 276

12.1.6变量errno不可用 276

12.1.7 perror()和strerror()不可用 276

12.1.8数据库文件操作不可用 276

12.1.9 bcmp()、bcopy()和bzero ()不可用 276

12.1.10本地IPC不可用 277

12.1.11 OOB API不同 277

12.1.12 setsockopt()SO_ DEBUG是可选的 277

12.2 16位Windows的局限性 277

12.2.1 16位Windows不清理现场 277

12.2.2 16位Windows是非抢占式的 278

12.2.3 16位Windows文件系统不安全 278

12.2.4 16位Windows使用分段寻址 279

12.2.5 fork()不可用 279

12.3移植Berkeley Sockets的其他事项 279

12.3.1包含文件 279

12.3.2 socket域 279

12.3.3 socket类型 279

12.3.4 socket句柄 280

12.3.5错误值 280

12.4函数列表 280

第13章 调试 284

13.1问题类型 284

13.1.1安装问题 285

13.1.2网络问题 285

13.1.3程序问题 285

13.1.4 WinSock DLL问题 285

13.2故障表现及其定位 286

13.3问题评估 286

13.4安装调试 287

13.5网络调试 287

13.5.1通用网络调试 288

13.5.2主机解析调试 289

13.6应用程序调试 289

13.7调试工具 290

13.7.1网络调试工具 290

13.7.2应用程序调试工具 295

13.7.3 WinSock符合性和性能测试工具 297

13.7.4其他调试工具 297

第14章 该做和不该做的 299

14.1特征化应用程序 299

14.2应用程序数据流 300

14.2.1增大缓存 301

14.2.2 MTU的考虑 301

14.2.3健壮性原则 302

14.2.4避免查看 303

14.2.5先接收后发送 303

14.3流算法 303

14.3.1发送结构化数据 303

14.3.2发送交互数据 305

14.3.3检测无效连接 306

14.3.4验证数据传输 306

14.4数据报算法 307

14.4.1实现超时机制 308

14.4.2数据报排序 308

14.4.3有节制地发送数据 308

14.4.4同步发送方和接收方 309

14.5好消息准则 309

14.5.1检查返回值 309

14.5.2检测部分成功 310

14.5.3准备应对任何阶段出现的任何错误 310

14.5.4检测非致命错误 310

14.5.5恰当地处理错误 311

14.5.6对用户透明 311

14.5.7留好出口 311

14.5.8不忽视任何警告信息 311

14.6常见陷阱和缺陷 312

14.6.1打开和命名socket 312

14.6.2建立连接 313

14.6.3监听和同意建立连接 313

14.6.4发送和接收 314

14.6.5关闭socket 315

14.6.6使用主机名称和地址 316

14.6.7使用WSAAsyncSelect()函数 316

14.6.8使用阻塞socket 317

14.6.9退出某个应用程序 319

14.6.10其他注意事项 320

第15章 系统平台 322

15.1 WOSA网络模型 322

15.2 32位WinSock 323

15.2.1 Windows 95 324

15.2.2交叉执行 324

15.2.3 32位WinSock特征 324

15.2.4 32位操作系统优势 328

15.3其他系统平台 329

第16章 可选特性 330

16.1自相矛盾的可选标准 330

16.2应该使用可选特性吗 331

16.3原始socket 332

16.3.1 ICMP ping应用 332

16.3.2 IP_TTL路径跟踪 337

16.4多播 338

16.4.1为何使用多播 338

16.4.2多播API 339

16.4.3多播机制 341

16.5环回接口 345

16.6共享socket 345

16.7可选项 346

16.8 socket作为文件句柄 346

16.9在任何时候都准备好应对任何错误 347

16.10其他可选特性 347

第17章 WinSock 2 348

17.1你需要WinSock 2吗 349

17.2特性概述 349

17.3多协议支持 351

17.3.1 WinSock 2架构 351

17.3.2协议独立 352

17.3.3名称空间独立 353

17.4重叠I/O 356

17.5分散和聚合 358

17.6服务质量 358

17.7 socket组 360

17.8多点和多播 361

17.9有条件的接受 362

17.10连接和断开数据 363

17.11 socket共享 364

17.12协议相关的附加功能 364

17.12.1 WSAIoctl() 365

17.12.2 get/setsockopt() 365

附录A TCP/IP协议首部 366

A.1 TCP/IP报文中的分层 366

A.2 ARP首部 367

A.3 IP首部 368

A.4 ICMP首部 369

A.5 IGMP首部 370

A.6 TCP首部 371

A.7 UDP首部 372

A.8 对话示例 373

附录B 快速参考 380

B.1结构 380

B.2函数 384

B.3宏 391

附录C错误信息参考 398

C.1获取错误值的位置 398

C.2可能出现的错误 399

C.3用户可以解决的错误 400

C.4详细的错误描述 400

C.5按数值排序的错误代码表 419

附录D用户必备 421

D.1重要文件 421

D.2编译与链接机制 422

D.3各种WinSock的使用 423

D.4各种编程语言的使用 424