第1章 绪论 1
1-1 概述 1
1-2 网络服务 2
1-2-1 运输层服务 2
1-2-2 数据链路层服务 2
1-3 网络应用编辑接口 3
1-3-1 Berkeley插口API 3
1-3-2 TLI 3
1-3-3 Windows Sockets 3
1-3-4 可视化编程环境下的网络控件 4
1-3-5 其他网络编程接口 4
1-4 网络编程模式 4
1-5 网络编程要考虑的问题 5
1-5-1 并发环境下的网络编程 5
1-5-2 异构环境下的网络编程 5
1-5-3 阻塞与非阻塞通信 6
1-5-4 服务类型的选择 7
1-5-5 差错处理 8
1-6 Unix标准的历史 9
1-6-1 BSD历史 9
1-6-2 Posix的历史 10
1-6-3 Open Group的历史 10
1-6-4 Unix版本和移植性 11
1-7 小结 11
1-8 习题 11
第2章 插口API简介 12
2-1 概述 12
2-2 端口和插口 12
2-3 基本数据结构 13
2-3-1 IPv4插口地址结构 13
2-3-2 IPv6插口地址结构 15
2-3-3 通用插口地址结构 16
2-4 基本插口函数 17
2-4-1 socket函数 17
2-4-2 bind函数 18
2-4-3 connect函数 19
2-4-4 listen函数 20
2-4-5 accept函数 21
2-4-6 getsockname函数 22
2-4-7 getpeername函数 22
2-4-8 shutdown函数 22
2-4-9 close函数 23
2-5 插口I/O函数 23
2-5-1 基本插口I/O函数 24
2-5-2 插口I/O状态查询函数 28
2-6 插口选项函数 32
2-6-1 插口选项函数 33
2-6-2 ioctl函数和fcntl函数 41
2-7 字节排序函数 42
2-8 字节操纵函数 43
2-9 地址转换函数 44
2-10 网络信息查询函数 45
2-10-1 gethostbyname函数 45
2-10-2 gethostbyaddr函数 47
2-10-3 gethostname函数 47
2-10-4 getservbyname函数 47
2-10-5 getserybyport函数 48
2-11 小结 48
2-12 习题 50
第3章 TCP插口编程 51
3-1 概述 51
3-2 TCP协议机制 51
3-2-1 TCP连接的建立和终止 51
3-2-2 TCP的有限状态机 53
3-2-3 TIME_WAIT状态 54
3-2-4 TCP的数据输出过程 55
3-3 基本TCP插口编程 56
3-3-1 TCP插口编程模式 56
3-3-2 实例 58
3-3-3 使用netstat观察TCP连接状态 64
3-3-4非阻塞方式下的客户-服务器程序 67
3-3-5 发送数据大小的选择 75
3-3-6 重要选项的设置 75
3-4 异常情况的处理 76
3-4-1 异常连接的处理 77
3-4-2 服务器的异常终止 77
3-4-3 对SIGPIPE信号的处理 78
3-5 TCP带外数据 79
3-5-1 带外数据的基本原理 79
3-5-2 带外数据的插口编程 80
3-6 异种平台间的数据交换 84
3-7 小结 84
3-8 习题 85
第4章 UDP插口编程 86
4-1 概述 86
4-1-1 UDP协议概述 86
4-1-2 UDP的数据输出过程 86
4-2 基本UDP插口编程 87
4-2-1 UDP编程模式 87
4-2-2 实例 88
4-2-3 测试UDP的不可靠性 93
4-2-4 调用connect( )的UDP应用 97
4-2-5 recvfrom的超时问题 97
4-2-6 数据报的截断 99
4-3 广播和多播 99
4-3-1 广播 100
4-3-2 广播地址 100
4-3-3 广播例程 101
4-3-4 多播 103
4-3-5 多播例程 104
4-4 比较TCP和UDP 107
4-5 小结 107
4-6 习题 108
第5章 基于插口的高级网络编程接口NPORT 109
5-1 概述 109
5-2 基本数据结构NPORT 109
5-3 NPORT中的功能函数 112
5-3-1 NPORTInit函数 113
5-3-2 NPORTModeBlock和NPORTModeNoBlock函数 114
5-3-3 函数NPORTLocalPort和NPORTLocalName 114
5-3-4 函数NPORTREMOTEPort和NPORTRemoteName 115
5-3-5 函数NPORTSPNumber 115
5-3-6 函数NPORTClocse和NPORTShutdown 116
5-3-7 函数NPORTSOpen 118
5-3-8 函数NPORTCOpen 119
5-3-9 函数NPORTDBOpen 121
5-3-10 函数NPORTDOpen 122
5-3-11 函数NPORTSAccept 124
5-3-12 函数NPORTCRequest 124
5-3-13 函数NPORTMsgRdy 126
5-3-14 函数NPORTWrtRdy 128
5-3-15 函数NPORTOOBRdy 129
5-3-16 函数NPORTLWrite 130
5-3-17 函数NPORTLRead 131
5-3-18 函数NPORTDPRead 131
5-3-19 函数NPORTDPWrite 132
5-3-20 函数NPORTDBWrite 133
5-3-21 函数NPORTRWError 134
5-4 基于NPORT网络程序设计 135
5-4-1 TCP NPORT编程模式 135
5-4-2 TCP NPORT程序实例 136
5-4-3 UDP NPORT编程模式 140
5-4-4 UDP NPORT程序实例 140
5-5 小结 141
5-6 习题 142
第6章 网络服务器的设计模式 143
6-1 概述 143
6-2 多进程环境下的网络编程 143
6-2-1 进程的基本概念 143
6-2-2 多进程下的网络编程 143
6-2-2 多进程下的网络编程 143
6-3 多线程环境下的应用程序设计 146
6-3-1 线程的基本概念 146
6-3-2 线程的基本编程接口 148
6-3-3 多线程程序设计 150
6-4 网络服务器的设计模式 158
6-4-1 串行服务器 158
6-4-2 并发服务器 162
6-4-3 不同服务器的比较 165
6-5 小结 166
6-6 习题 166
第7章 数据链路层的网络编程 167
7-1 概述 167
7-2 BPF与DLPI 167
7-3 Libpcap 169
7-3-1 Libpcap简介 169
7-3-2 Libpcap接口函数简介 170
7-3-3 Libpcap程序设计实例 174
7-4 小结 180
7-5 习题 180
第8章 Windows环境下的网络程序设计 181
8-1 概述 181
8-2 WinSock与Berkeley插口API的区别 182
8-2-1 插口数据类型 182
8-2-2 错误代码 182
8-2-3 指针 183
8-2-4 重命名的函数 183
8-2-5 阻塞与非阻塞模式的选择 184
8-2-6 Windows Sockets支持的最大插口数目 185
8-2-7 头文件 185
8-2-8 原始插口 185
8-2-9 Windows插口API对Berkeley插口API的扩展 186
8-3 Windows Sockets接口对Berkeley插口API的扩展 186
8-3-1 基本的扩展函数 188
8-3-2 WinSock2中扩展的API函数 195
8-4 基于Windows Sockets API的网络编程 206
8-4-1 基于类的网络程序设计 206
8-4-2 基于控件的网络程序设计 210
8-5 小结 217
8-6 习题 217
第9章 VMS操作系统下的DECnet网络编程 218
9-1 概述 218
9-1-1 VMS或OpenVMS 218
9-1-2 DECnet 219
9-2 DECnet网络编程基础 220
9-2-1 基本概念 220
9-2-2 任务到任务通信 221
9-2-3 所用系统服务调用 221
9-2-4 逻辑链路管理 222
9-2-5 非透明通信过程中利用的数据结构 222
9-2-6 非透明通信过程描述 225
9-2-7 常见错误分析 227
9-3 实例 228
9-4 小结 239
参考文献 240