图书目录

目  录

第1章  TCP/IP协议基础 1

1.1  什么是TCP/IP 1

1.2  TCP/IP协议的分层结构 1

1.3  应用层 5

1.3.1  DNS 5

1.3.2  端口的概念 6

1.4  传输层 6

1.4.1  TCP协议 7

1.4.2  UDP协议 7

1.5  网络层 8

1.5.1  IP协议 8

1.5.2  ARP协议 15

1.5.3  RARP协议 16

1.5.4  ICMP协议 17

1.6  数据链路层 26

1.6.1  数据链路层的基本概念 26

1.6.2  数据链路层的主要功能 26

1.7  一些容易混淆的术语 27

1.7.1  MTU 27

1.7.2  IP分组的分片问题 28

1.7.3  数据段 28

1.7.4  数据报 28

1.7.5  数据包 28

1.7.6  数据帧 29

1.7.7  比特流 29

第2章  本机网络信息编程 30

2.1  获取本地计算机的名称和IP 30

2.1.1  gethostname函数 30

2.1.2  gethostbyname函数 30

2.1.3  inet_ntoa函数 31

2.2  获取本机子网IP地址和子网掩码 34

2.3  获取本机物理网卡地址信息 36

2.4  获取本机所有网卡(包括虚拟网卡)的列表和信息 38

2.5  获取本地计算机的IP协议统计数据 41

2.6  获取本机的DNS地址 44

2.7  获取本机上的TCP统计数据 46

2.8  获取本机上的UDP统计数据 49

2.9  获取本机上支持的网络协议信息 50

2.10  获取本地计算机的域名 52

第3章  多线程编程 54

3.1  多线程编程的基本概念 54

3.1.1  为何要用多线程 54

3.1.2  操作系统和多线程 54

3.1.3  进程和线程 55

3.1.4  线程调度 56

3.1.5  线程函数 59

3.1.6  线程对象和句柄 59

3.1.7  线程对象的安全属性 59

3.1.8  线程标识 60

3.1.9  多线程编程的3种库 60

3.2  利用Win32 API函数进行多线程开发 60

3.2.1  线程的创建 61

3.2.2  线程的结束 65

3.2.3  线程和MFC控件交互 71

3.2.4  线程的暂停和恢复 78

3.2.5  消息线程和窗口线程 81

3.2.6  线程同步 84

3.3  CRT库中的多线程函数 97

3.4  MFC多线程开发 105

3.4.1  线程的创建 106

3.4.2  线程同步 109

第4章  套接字基础 124

4.1  套接字基本概念 124

4.1.1  网络程序的架构 125

4.1.2  套接字的类型 126

4.2  套接字地址 127

4.2.1  通用socket地址 127

4.2.2  专用socket地址 128

4.2.3  IP地址的转换 129

4.2.4  主机字节序和网络字节序 131

4.2.5  I/O工作模式和I/O模型 133

第5章  TCP套接字编程 134

5.1  TCP套接字编程的基本步骤 134

5.2  协议簇和地址簇 134

5.3  socket地址 136

5.3.1  通用socket地址 137

5.3.2  专用socket地址 138

5.3.3  IP地址的转换 139

5.3.4  获取套接字地址 141

5.4  TCP套接字编程的相关函数 143

5.4.1  WSAStartup函数 143

5.4.2  socket/WSASocket函数 143

5.4.3  bind函数 145

5.4.4  listen函数 147

5.4.5  accept/ WSAAccept函数 147

5.4.6  connect/WSAConnect函数 148

5.4.7  send/ WSASend函数 148

5.4.8  recv/ WSARecv函数 148

5.4.9  closesocket函数 149

5.4.10  inet_addr函数 149

5.4.11  inet_ntoa函数 149

5.4.12  htonl函数 149

5.4.13  htons函数 150

5.4.14  WSAAsyncSelect函数 150

5.4.15  WSACleanup函数 151

5.5  简单的TCP套接字编程 151

5.6  深入理解TCP编程 156

5.6.1  数据发送和接收涉及的缓冲区 156

5.6.2  TCP数据传输的特点 157

5.6.3  数据发送的6种情形 157

5.6.4  数据接收时碰到的情形 159

5.6.5  一次请求响应的数据接收 160

5.6.6  多次请求响应的数据接收 165

5.7  I/O控制命令 176

5.8  套接字选项 180

5.8.1  基本概念 180

5.8.2  选项的级别 180

5.8.3  获取套接字选项 182

5.8.4  设置套接字选项 187

第6章  UDP套接字编程 190

6.1  UDP套接字编程的基本步骤 190

6.2  UDP套接字编程的相关函数 192

6.2.1  sendto/WSASendto函数 192

6.2.2  recvfrom/WSARecvfrom函数 192

6.3  实战UDP套接字 192

6.4  UDP丢包及无序问题 199

第7章  原始套接字编程 200

7.1  原始套接字概述 200

7.2  原始套接字的强大功能 200

7.3  原始套接字的基本编程步骤 202

7.3.1  创建原始套接字函数socket 202

7.3.2  接收函数recvfrom 204

7.3.3  发送函数sendto 206

7.4  常规编程示例 206

7.5  抓取所有IP数据包 214

7.6  抓取所有IP数据包 220

第8章  MFC套接字编程 227

8.1  概述 227

8.2  类CAsyncSocket 227

8.2.1  基本概念 227

8.2.2  成员函数 228

8.2.3  基本用法 232

8.2.4  网络事件处理 234

8.3  类CSocket 243

8.3.1  基本概念 243

8.3.2  成员函数 244

8.3.3  基本用法 245

8.4  基于CAsyncSocket的网络五子棋 250

8.4.1  概述 250

8.4.2  五子棋简介 251

8.4.3  软件总体架构 251

8.4.4  棋盘类—CTable 252

8.4.5  游戏模式类—CGame 254

8.4.6  消息机制 256

8.4.7  主要算法 259

第9章  简单的网络服务器设计 266

9.1  循环服务器 266

9.1.1  UDP循环服务器 266

9.1.2  TCP循环服务器 267

9.2  多线程并发服务器 271

9.3  I/O复用服务器 272

第10章  基于I/O模型的网络开发 273

10.1  同步和异步 273

10.1.1  同步 273

10.1.2  异步 274

10.2  阻塞和非阻塞 274

10.2.1  阻塞 274

10.2.2  非阻塞 275

10.3  同步/异步和阻塞/非阻塞的关系 276

10.4  I/O和网络I/O 276

10.5  I/O模式 277

10.5.1  阻塞模式 277

10.5.2  非阻塞模式 278

10.6  I/O模型 278

10.7  选择模型 279

10.7.1  基本概念 279

10.7.2  select函数 280

10.7.3  实战select模型 282

10.8  异步选择模型WSAAsyncSelect 288

10.8.1  基本概念 288

10.8.2  WSAAsyncSelect函数 289

10.8.3  实战WSAAsyncSelect模型 291

10.9  事件选择模型 303

10.9.1  基本概念 303

10.9.2  WSAEventSelect函数 303

10.9.3  实战WSAEventSelect模型 304

10.10  重叠I/O模型 309

10.10.1  基本概念 309

10.10.2  创建重叠I/O模型下的套接字 312

10.10.3  获取重叠I/O操作完成结果 313

10.10.4  基于事件通知(有64个socket的限制) 314

10.10.5  基于完成例程 321

10.11  完成端口 335

10.11.1  基本概念 335

10.11.2  完成端口能干什么 336

10.11.3  完成端口的优势 336

10.11.4  完成端口编程的基本流程 337

10.11.5  相关API 338

第11章  网络性能工具iperf的使用 348

11.1  iperf概述 348

11.2  iperf的特点 348

11.3  iperf的工作原理 348

11.4  iperf的主要功能 350

11.5  iperf中Linux下的使用 350

11.5.1  在Linux下安装iperf 351

11.5.2  iperf的简单使用 352

11.6  iperf中Windows下的使用 353

11.6.1  命令行版本 353

11.6.2  图形化版本 353

第12章  WinInet开发Internet客户端 355

12.1  什么是WinInet 355

12.2  认识WinInet API函数 355

12.2.1  通用WinInet API函数 356

12.2.2  WinInet HTTP函数 361

12.2.3  WinInet FTP函数 363

12.2.4  WinInet Gopher函数 364

12.2.5  读取HTTP网页数据 364

12.3  认识MFC WinInet类库 366

12.3.1  访问HTTP服务器的一般流程 367

12.3.2  访问FTP服务器的流程 368

12.4  FTP开发 369

12.4.1  FTP概述 369

12.4.2  FTP的工作原理 370

12.4.3  FTP的传输方式 371

12.4.4  FTP的工作方式 371

12.4.5  FTP命令 372

12.4.6  FTP应答码 375

12.4.7  开发FTP客户端 377

第13章  HTTP网络编程 390

13.1  HTTP简介 390

13.2  HTTP的工作原理 390

13.3  HTTP的特点 391

13.4  HTTP的消息结构 391

13.5  客户端请求消息 392

13.6  服务器响应消息 393

13.7  HTTP状态码 394

13.8  HTTP状态码分类 394

13.9  实现HTTP服务器 395

13.9.1  概述 395

13.9.2  界面设计 395

13.9.3  类CWebServerApp 396

13.9.4  类CWebServerDlg 396

13.9.5  类CLog 397

13.9.6  类CGenericServer 398

13.9.7  类CHTTPServer 404

13.9.8  运行结果 409

第14章  C++ Web编程 411

14.1  CGI程序的工作方式 411

14.2  架设Web服务器Apache 412

14.3  ActiveX、OLE和COM 415

14.4  什么是OCX 415

14.5  ActiveX 416

14.6  ActiveX控件 416

14.6.1  生成和注册ActiveX控件 416

14.6.2  在网页html中使用ActiveX控件 420

14.6.3  在MFC应用程序中使用ActiveX控件 422

14.6.4  在测试容器中使用(测试)ActiveX控件 424

14.6.5  在网页的JavaScript中使用控件 426

14.7  为ActiveX控件添加对话框 428

14.8  为ActiveX控件添加事件 432

14.8.1  常用事件 432

14.8.2  自定义事件 434

14.9  为ActiveX控件添加方法 438

14.9.1  常用方法 438

14.9.2  自定义方法 439

第15章  中国象棋网上对弈系统 441

15.1  电脑游戏概述 441

15.2  系统概述 442

15.3  系统运行结果 443

15.4  系统构成 443

15.5  数据结构 443

15.5.1  棋盘 443

15.5.2  棋子信息数组 445

15.5.3  变量与函数 445

15.6  图像绘制 446

15.6.1  主窗口 446

15.6.2  棋盘的绘制 447

15.6.3  棋子的绘制及初始化 447

15.6.4  动态显示 448

15.6.5  回看功能 449

15.7  规则设置 449

15.7.1  棋子规则 449

15.7.2  规则算法 450

15.8  网络通信 451

15.8.1  CCOM类 451

15.8.2  数据代码 452

15.8.3  数据更新 453

15.8.4  聊天功能 453

15.9  棋子操作 453

15.9.1  获取点击 453

15.9.2  走棋判断 454

15.9.3  光标变化 455

15.10  主框架重要函数解析 455

15.10.1  WinMain函数 455

15.10.2  InitInstance函数 456

15.11  通信函数解析 457

15.11.1  Listen函数 457

15.11.2  ListenThread函数 458

15.11.3  SendMsg函数 460

15.12  象棋业务逻辑重要函数解析 461

15.12.1  Graphics函数 461

15.12.2  Draw函数 462

15.12.3  InitChessBoard函数 463

15.12.4  ChessRule函数 464

第16章  WinPcap编程 474

16.1  什么是WinPcap 474

16.2  WinPcap的历史 474

16.3  WinPcap的功能 475

16.4  WinPcap的应用领域 475

16.5  WinPcap不能做什么 476

16.6  WinPcap组成结构 476

16.7  WinPcap内核层NPF 477

16.8  WinPcap的数据结构和主要功能函数 478

16.8.1  网络接口的地址 478

16.8.2  数据包头的格式 479

16.8.3  pcap文件格式 479

16.8.4  获得网卡列表pcap_findalldevs 480

16.8.5  释放空间函数pcap_freealldevs 481

16.8.6  打开网络设备函数pcap_open_live 481

16.8.7  捕获数据包pcap_loop 482

16.8.8  捕获数据包pcap_dispatch 483

16.8.9  捕获数据包pcap_next_ex 483

16.9  搭建WinPcap的开发环境 484

16.9.1  WinPcap通信库的安装 484

16.9.2  准备开发包 486

16.9.3  第一个WinPcap应用程序 487

16.9.4  捕获访问Web站点的网络包 488

第17章  ICE网络编程 494

17.1  ICE简介 494

17.2  ICE的优势 494

17.3  ICE的工作原理 495

17.4  ICE调用模式 495

17.5  客户端与服务器端的结构 496

17.6  ICE的下载、安装和配置 496

17.6.1  下载ICE 496

17.6.2  安装ICE 497

17.6.3  安装第三方库 498

17.6.4  配置ICE环境变量 499

17.7  ICE的使用 500

第18章  IPv6网络编程 501

18.1  IPv4的现状和不足 501

18.1.1  地址空间、地址方案与选路的问题 502

18.1.2  网络管理与配置的问题 505

18.1.3  服务类型问题 507

18.1.4  IP选项的问题 507

18.1.5  IPv4安全性问题 508

18.2  是增加补丁还是彻底升级改进 508

18.3  IPv6的概念 509

18.4  IPv6的发展历史 509

18.5  IPv6的特点 511

18.6  IPv6地址 511

18.6.1  IPv6地址表示方法 511

18.6.2  IPv6 前缀 513

18.6.3  IPv6地址的类型 513

18.7  IPv6数据报格式 517

18.8  基于IPv6的 Socket网络编程技术 522

18.8.1  地址表示 522

18.8.2  IPv6的Socket API函数 523

18.8.3  IPv6下编写应用程序的注意点 524

18.8.4  实战IPv6 524