《精通Windows Sockets网络开发 基于Visual C++实现》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:孙海民编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2008
  • ISBN:7115179115
  • 页数:462 页
图书介绍:Windows Sockets是当前主要的网络开发技术。本书由浅入深循序渐进讲授读者如何使用Windows Sockets开发网络应用程序。全书内容包括准备开发环境、TCP/IP基本介绍、Windows套接字基础、协议特征、基本TCP套接字编程、基本UDP套接字编程、套接字选项、套接字阻塞模式开发、套接字非阻塞模式开发、select模型开发、WSAAsyncSelect模型开发、WSAEventSelect模型开发、重叠I/O模型开发和完成端口模型开发。为使读者深入理解套接字的理论知识,增加实践项目经验。本书最后七章,每章讲解了一个具有实践意义的网络应用程序。在这些实例中包含许多软件开发技术,如STL、ADO、多线程、MFC、软件设计模式等。相信读者通过对本书的学习后,软件开发技术一定会有较大的提高。本书适合广大的网络应用程序设计初学者、Windows网络应用程序开发人员、VC++开发工程师、网络游戏开发人员、软件培训机构学员和高校学生阅读。

第1篇 网络开发基础篇 3

第1章 准备开发环境 3

1.1 Windows Sockets开发概述 3

1.1.1 网络程序开发应用 3

1.1.2 网络程序结构——C/S、B/S 3

1.1.3 网络程序通信基础——网络协议 4

1.1.4 网络程序通信技术——Windows Sockets介绍 4

1.2 连接网络 6

1.2.1 TCP/IP设置 6

1.2.2 TCP/IP是否工作正常 8

1.2.3 系统与网络适配器间的通信 8

1.2.4 默认网关 8

1.2.5 ping其他计算机IP地址 9

1.3 创建应用程序 9

1.3.1 控制台程序 10

1.3.2 MFC应用程序 11

1.4 调试两个应用程序 12

1.4.1 启动两个工程 13

1.4.2 将一个工程加入到另一个工程空间 13

1.5 配置开发环境 14

1.6 小结 15

第2章 TCP/IP简介 16

2.1 开放系统互连参考模型 16

2.2 TCP/IP协议概述 17

2.2.1 TCP/IP模型 17

2.2.2 UDP 18

2.2.3 TCP 18

2.2.4 端口 19

2.3 小结 19

第3章 Windows Sockets基础 20

3.1 Windows Sockets 20

3.1.1 应用程序与Windows Sockets的关系 20

3.1.2 套接字 21

3.2 协议特征 22

3.2.1 面向连接与面向无连接 22

3.2.2 可靠性与次序性 22

3.2.3 面向消息 22

3.2.4 部分消息 23

3.2.5 从容关闭 23

3.2.6 路由选择 24

3.2.7 广播数据 24

3.3 IP定址 24

3.3.1 IP定址 25

3.3.2 字节顺序问题 25

3.4 基本TCP套接字编程 26

3.4.1 WSAStartup()函数 26

3.4.2 socket()函数 28

3.4.3 bind()函数 28

3.4.4 listen()函数 29

3.4.5 accept()函数 29

3.4.6 recv()函数 30

3.4.7 send()函数 31

3.4.8 closesocket()函数 31

3.4.9 shutdown()函数 31

3.4.10 connect()函数 32

3.5 TCP示例程序 32

3.5.1 服务器实现 33

3.5.2 客户端实现 35

3.6 基本UDP套接字编程 37

3.6.1 recvfrom()函数 37

3.6.2 sendto()函数 37

3.7 UDP示例程序 38

3.7.1 服务器实现 38

3.7.2 客户端实现 40

3.8 套接字选项 41

3.8.1 getsockopt()函数 41

3.8.2 setsockopt()函数 42

3.8.3 SOL SOCKET选项级别 43

3.9 小结 44

第2篇 Visual C++网络模式开发篇 47

第4章 阻塞模式开发 47

4.1 套接字的阻塞模式 47

4.1.1 阻塞模式 47

4.1.2 设置套接字的阻塞模式 49

4.1.3 阻塞模式套接字的优势和不足 49

4.2 客户端与服务器相互问候 50

4.3 服务器设计 50

4.3.1 启动 50

4.3.2 接受请求 50

4.3.3 接收数据 51

4.3.4 退出 51

4.3.5 错误提示 51

4.4 服务器实现 51

4.4.1 初始化 52

4.4.2 创建套接字 54

4.4.3 绑定套接字 54

4.4.4 监听 56

4.4.5 接受请求 56

4.4.6 接收数据 56

4.4.7 发送数据 58

4.4.8 退出 59

4.5 客户端设计 59

4.5.1 启动 59

4.5.2 连接服务器 60

4.5.3 接收数据 60

4.5.4 退出 60

4.6 客户端实现 60

4.6.1 初始化 61

4.6.2 创建套接字 61

4.6.3 连接服务器 62

4.6.4 发送数据 63

4.6.5 接收数据 63

4.6.6 退出 64

4.7 小结 64

第5章 非阻塞模式开发 65

5.1 套接字的非阻塞模式 65

5.1.1 非阻塞模式 65

5.1.2 设置套接字的非阻塞模式 65

5.1.3 非阻塞模式套接字的优势和不足 68

5.2 远程算数运算程序 68

5.2.1 需求分析 68

5.2.2 数据包设计 69

5.3 服务器设计 69

5.3.1 多线程设计 69

5.3.2 界面设计 71

5.4 服务器实现 71

5.4.1 主线程 72

5.4.2 接受客户端请求线程 77

5.4.3 客户端类 78

5.4.4 清理资源线程 86

5.5 客户端设计 88

5.5.1 多线程设计 88

5.5.2 界面设计 89

5.6 客户端实现 89

5.6.1 主线程 89

5.6.2 数据发送线程 97

5.6.3 数据接收线程 99

5.7 小结 100

第6章 Select模型开发 101

6.1 套接字Select模型 101

6.1.1 Select模型 101

6.1.2 select()函数 102

6.1.3 Select模型的优势和不足 106

6.2 远程文件下载 107

6.2.1 需求分析 107

6.2.2 数据包设计 107

6.3 服务器设计 108

6.3.1 多线程设计 108

6.3.2 界面设计 109

6.3.3 发送目录结构设计 109

6.4 服务器实现 110

6.4.1 静态类图 110

6.4.2 初始化 113

6.4.3 启动服务 114

6.4.4 接收处理客户端目录和文件长度的请求 116

6.4.5 接收客户端数据 120

6.4.6 向客户端发送目录 123

6.4.7 上传文件 129

6.4.8 退出 133

6.5 客户端设计 133

6.5.1 多线程设计 133

6.5.2 界面设计 134

6.6 客户端实现 136

6.6.1 静态类图 136

6.6.2 初始化 138

6.6.3 连接服务器 139

6.6.4 发送请求接收目录 140

6.6.5 浏览目录 147

6.6.6 下载文件 149

6.6.7 显示下载文件进度 159

6.6.8 退出 160

6.7 小结 160

第7章 WSAAsyncSelect模型开发 161

7.1 套接字WSAAsyncSelect模型分析 161

7.1.1 WSASsyncSelect模型 161

7.1.2 与Select模型比较 162

7.2 套接字WSAAsyncSelect模型实现 162

7.2.1 WSAAsyncSelect()函数 163

7.2.2 窗口例程 163

7.2.3 创建窗口 164

7.3 WSAAsyncSelect模型示例程序 167

7.3.1 声明自定义消息 168

7.3.2 声明窗口例程 168

7.3.3 注册窗口类 169

7.3.4 创建和显示窗口 169

7.3.5 创建套接字 169

7.3.6 注册感兴趣的网络事件 169

7.3.7 绑定套接字 169

7.3.8 开始监听 170

7.3.9 消息循环 170

7.3.10 程序退出 170

7.3.11 窗口例程 170

7.3.12 CClient类 171

7.3.13 管理客户端套接字的链表 171

7.3.14 网络事件消息处理函数 172

7.4 调用WSAAsyncSelect()函数注意问题 173

7.4.1 接收不到网络事件 173

7.4.2 关于accept()函数 173

7.4.3 关于FD READ网络事件 174

7.4.4 如何判断套接字已经关闭 174

7.4.5 发送数据失败 174

7.5 发生网络事件的条件 174

7.5.1 FD_READ事件 174

7.5.2 FD_WRITE事件 174

7.5.3 FD_ACCEPT事件 175

7.5.4 FD_CONNECT事件 175

7.5.5 FD_CLOSE事件 175

7.6 WSAAsyncSelect模型优势和不足 175

7.7 局域网简易聊天程序 176

7.7.1 需求分析 176

7.7.2 用户状态设计 177

7.7.3 数据包类设计 179

7.8 服务器设计 180

7.8.1 界面设计 180

7.8.2 通信层架构设计 182

7.9 服务器实现 182

7.9.1 开发前的准备 182

7.9.2 静态类图 183

7.9.3 启动服务器 186

7.9.4 初始化 191

7.9.5 接受客户端请求 194

7.9.6 接收数据 196

7.9.7 处理数据 203

7.9.8 删除用户 210

7.9.9 用户离线 212

7.9.10 退出 213

7.10 客户端设计 218

7.10.1 界面设计 218

7.10.2 通信层架构设计 220

7.10.3 显示的消息格式设计 220

7.11 客户端实现 220

7.11.1 静态类图 220

7.11.2 初始化 223

7.11.3 接收服务器数据 227

7.11.4 显示离线消息 228

7.11.5 创建聊天窗口 229

7.11.6 在线聊天 231

7.11.7 发送离线消息 234

7.11.8 被动聊天 234

7.11.9 保存聊天记录 235

7.12 小结 236

第8章 WSAEventSelect模型开发 238

8.1 套接字WSAEventSelect模型 238

8.1.1 WSAEventSelect模型 238

8.1.2 与其他模型的比较 238

8.2 套接字WSAEventSelect模型实现 239

8.2.1 WSAEventSelect()函数 239

8.2.2 WSACreateEvent()函数 240

8.2.3 WSAResetEvent()函数 241

8.2.4 WSACloseEvent()函数 241

8.2.5 WSAWaitForMultipleEvents()函数 241

8.2.6 WSAEnumNetworkEvents()函数 242

8.3 WSAEventSelect模型示例程序 244

8.3.1 CClient类 245

8.3.2 管理客户端套接字的链表 245

8.3.3 定义事件对象数组等变量 246

8.3.4 创建套接字 246

8.3.5 为监听套接字注册网络事件 246

8.3.6 开始监听 247

8.3.7 等待网络事件 247

8.3.8 获取发生的网络事件 247

8.3.9 FD_ACCEPT网络事件 248

8.3.10 FD_READ网络事件 249

8.3.11 FD_WRITE网络事件 249

8.3.12 FD_CLOSE网络事件 249

8.3.13 退出 250

8.4 调用WSAEventSelect()函数注意的问题 250

8.4.1 多次调用WSAEventSelect()函数 250

8.4.2 一个套接字不要关联多个事件对象 250

8.4.3 取消为套接字注册的网络事件 251

8.4.4 关于accept()函数 251

8.4.5 关于FD_READ网络事件 251

8.4.6 关于FD_WRITE网络事件 251

8.4.7 关于FD_CLOSE网络事件 251

8.5 WSAEventSelect模型的优势和不足 251

8.6 网络五子棋游戏 252

8.6.1 需求分析 252

8.6.2 游戏规则 253

8.6.3 用户状态设计 253

8.6.4 数据包设计 253

8.7 服务器设计 254

8.7.1 多线程设计 254

8.7.2 界面设计 255

8.8 服务器实现 255

8.8.1 静态类图 255

8.8.2 初始化 260

8.8.3 启动服务 262

8.8.4 服务器运行 264

8.8.5 接收客户端请求 266

8.8.6 接收数据 270

8.8.7 更新用户列表 273

8.8.8 发送用户列表 277

8.8.9 客户端退出 278

8.8.10 服务器退出 278

8.9 客户端设计 279

8.9.1 多线程设计 279

8.9.2 界面设计 279

8.10 客户端实现 281

8.10.1 静态类图 282

8.10.2 创建切分窗口 287

8.10.3 初始化 289

8.10.4 工作线程 294

8.10.5 与服务器通信 295

8.10.6 更新用户列表 299

8.10.7 开始游戏 301

8.10.8 下棋 306

8.10.9 结束游戏 317

8.10.10 退出 318

8.11 小结 319

第9章 重叠I/O模型开发 320

9.1 套接字重叠I/O模型 320

9.1.1 重叠I/O模型 320

9.1.2 与其他模型的比较 321

9.2 套接字重叠I/O模型实现概述 322

9.3 Win32重叠I/O相关技术 322

9.3.1 CreateFile()函数 322

9.3.2 OVERLAPPED结构 323

9.3.3 ReadFile()函数 323

9.3.4 WriteFile()函数 324

9.3.5 GetOverlappedResult()函数 324

9.3.6 示例程序 325

9.4 套接字重叠I/O 327

9.4.1 创建套接字 327

9.4.2 接收数据 327

9.4.3 WSAOVERLAPPED结构 328

9.4.4 WSAWaitForMultipleEvents()函数 329

9.4.5 WSAGetOverlappedResult()函数 329

9.4.6 发送数据 329

9.5 事件通知 330

9.5.1 CClient类 331

9.5.2 管理客户端的链表 332

9.5.3 声明变量和函数 333

9.5.4 套接字的创建、绑定和监听 333

9.5.5 创建服务线程 334

9.5.6 接受客户端连接请求 334

9.5.7 服务线程 335

9.6 完成例程 336

9.6.1 CClient类 337

9.6.2 管理客户端的链表 339

9.6.3 套接字的创建、绑定和监听 339

9.6.4 接受客户端连接请求 339

9.6.5 服务线程 340

9.7 实例开发——网络词典 340

9.7.1 需求分析 341

9.7.2 数据包设计 341

9.7.3 数据库设计 342

9.8 服务器设计 342

9.8.1 多线程设计 342

9.8.2 界面设计 343

9.9 服务器实现 345

9.9.1 开发前的准备 346

9.9.2 静态类图 347

9.9.3 初始化 351

9.9.4 启动服务 358

9.9.5 服务器运行 359

9.9.6 接收数据 361

9.9.7 查询单词含义 364

9.9.8 发送数据 366

9.9.9 查看未知单词 367

9.9.10 数据库操作 370

9.9.11 退出 375

9.10 客户端设计 376

9.10.1 多线程设计 376

9.10.2 界面设计 376

9.11 客户端实现 377

9.11.1 静态类图 377

9.11.2 启动客户端 380

9.11.3 连接服务器 381

9.11.4 工作线程 382

9.11.5 发送数据 385

9.11.6 接收数据 388

9.11.7 显示单词含义 390

9.11.8 退出 391

9.12 小结 391

第10章 完成端口模型开发 392

10.1 套接字完成端口模型 392

10.1.1 利用完成端口接收数据 392

10.1.2 完成端口模型 393

10.1.3 与重叠I/O模型比较 394

10.2 完成端口模型实现 395

10.2.1 创建完成端口对象 395

10.2.2 创建服务线程 396

10.2.3 套接字与完成端口关联 397

10.2.4 发起重叠I/O操作 398

10.2.5 等待重叠I/O操作结果 399

10.2.6 取消异步操作 400

10.2.7 投递完成通知包 400

10.3 完成端口示例程序 401

10.3.1 声明单I/O操作数据结构 402

10.3.2 CClient类 403

10.3.3 管理客户端的链表 404

10.3.4 声明变量和函数 405

10.3.5 创建完成端口 405

10.3.6 创建服务线程 405

10.3.7 套接字的创建、绑定和监听 405

10.3.8 套接字与完成端口关联 406

10.3.9 发起重叠I/O操作 407

10.3.10 等待I/O操作结果 407

10.4 考试系统 409

10.4.1 需求分析 409

10.4.2 数据包设计 410

10.4.3 数据库设计 410

10.5 服务器设计 411

10.5.1 多线程设计 411

10.5.2 界面设计 412

10.6 服务器实现 414

10.6.1 静态类图 414

10.6.2 初始化 419

10.6.3 启动服务 427

10.6.4 接受客户端请求线程 430

10.6.5 服务线程 432

10.6.6 接收客户端数据 433

10.6.7 验证学号 437

10.6.8 发送数据 438

10.6.9 考生交卷 440

10.6.10 跟踪客户端连接状态 442

10.6.11 服务器退出 443

10.7 客户端设计 446

10.8 客户端实现 447

10.8.1 静态类图 448

10.8.2 初始化 450

10.8.3 连接服务器并接收试卷 450

10.8.4 初始化试卷头 454

10.8.5 初始化试卷 455

10.8.6 答卷 459

10.8.7 发送心跳包 460

10.8.8 交卷 460

10.9 小结 462