第一篇 网络基础 3
第1章UNIX系统基础 3
1.1 UNIX系统概述 3
1.1.1 UNIX操作系统的发展史 3
1.1.2 UNIX系统的体系结构 5
1.1.3 UNDX系统的目录结构 6
1.1.4 UNIX系统的特点 7
1.2常用UNIX网络命令 7
1.3网络基本配置文件 9
1.4软件开发环境 11
1.4.1 vi编辑器 11
1.4.2 GCC编译器 12
1.4.3 GDB调试器 14
1.4.4 GDB功能简介 14
1.5小结 17
1.6思考与练习 17
第2章TCP/IP基础与原理 18
2.1 TCP/IP体系 18
2.2 IP协议 19
2.2.1 IPv4数据包结构 20
2.2.2 IP地址 21
2.2.3 IPv6的发展及其特点 23
2.3 ICMP协议 25
2.4 IP路由 27
2.5 TCP协议 28
2.5.1 TCP数据报文结构 28
2.5.2建立和拆除TCP连接 30
2.6 UDP协议 33
2.7端口号分配 34
2.8小结 36
2.9思考与练习 36
第二篇 套接字 39
第3章 套接字基础 39
3.1套接字概述 39
3.1.1 Socket历史 39
3.1.2 Socket功能 39
3.2套接字类型 40
3.2.1流式套接字(SOCK_STREAM) 40
3.2.2数据报套接字(SOCK_DGRAM) 40
3.2.3原始套接字 42
3.2.4 SEQ套接字 42
3.2 5 RDM套接字 42
3.3套接字地址结构 42
3.4端口 43
3.4.1简介 43
3.4.2常用网络服务端口 44
3.5带外数据 52
3.5.1 TCP的带外数据 52
3.5.2程序实例 56
3.6连接类型 60
3.7小结 60
3.8思考与练习 60
第4章TCP套接字 61
4.1基本方法 61
4.1.1 TCP套接字实现过程 61
4.1.2 TCP服务器模板 62
4.1.3 TCP客户模板 62
4.2实现TCP套接字 63
4.2.1产生TCP套接字 63
4.2.2绑定 64
4.2.3监听 66
4.2.4接受请求 67
4.2.5连接建立 68
4.2.6数据传输 70
4.2.7终止连接 71
4.3 TCP套接字编程实例 72
4.3.1实例说明 72
4.3.2程序实例 72
4.4小结 75
4.5思考与练习 75
第5章UDP套接字 76
5.1基本方法 76
5.1.1 UDP套接字实现过程 76
5.1.2 UDP服务器模板 77
5.1.3 UDP客户模板 78
5.2函数说明 79
5.2.1 UDP套接字的数据发送函数sendto() 79
5.2.2 UDP套接字的数据接收函数recvfrom() 79
5.3 UDP套接字编程实例 81
5.4小结 84
5.5思考与练习 84
第三篇UNIX网络编程实用技术 87
第6章 并发服务器 87
6.1并发服务器概述 87
6.1.1服务器的分类 87
6.1.2迭代服务器实例 88
6.1.3并发技术 93
6.1.4并发服务器算法 94
6.2多进程服务器 96
6.2.1进程概念与特征 96
6.2.2创建进程 97
6.2.3终止进程 100
6.2.4多进程并发服务器 105
6.2.5多进程并发服务器实例 107
6.2.6多进程服务器的问题 113
6.3多线程服务器 113
6.3.1线程基础 113
6.3.2线程函数调用 114
6.3.3多线程并发服务器 117
6.3.4给新线程传递参数 118
6.3.5多线程并发服务器实例 118
6.3.6线程安全实例 122
6.4 I/O多路复用服务器 136
6.4.1 I/O模式 136
6.4.2 select()函数 137
6.4.3单线程并发服务器 138
6.5套接字终止处理 143
6.6小结 145
6.7思考与练习 145
第7章 名字解析和IP地址转换 146
7.1名字解析 146
7.2套接字地址 147
7.2.1概述 147
7.2.2套接字属性 148
7.2.3地址结构 148
7.2.4字节顺序 150
7.2.5字节顺序转换函数 152
7.2.6 IP地址转换函数 152
7.2.7套接字地址信息函数 153
7.3套接字信息函数 155
7.3.1主机名转换为IP地址:gethostbyname()函数 156
7.3.2 IP地址转换为主机名:gethostbyaddr()函数 158
7.3.3获得服务器端口号:getservbyname()函数 160
7.3.4端口号转换为服务名:getservbyport()函数 161
7.4小结 162
7.5思考与练习 162
第8章 同步及进程间通信 163
8.1线程同步 163
8.1.1线程同步基础 163
8.1.2互斥锁 164
8.1.3加锁和解锁互斥锁 165
8.1.4条件变量 169
8.1.5同步线程退出 180
8.1.6死锁 185
8.2进程同步 191
8.2.1进程同步的基本概念 191
8.2.2进程关系 192
8.2.3信号处理 194
8.2.4有关信号的系统调用 199
8.2.5信号机制 206
8.2.6信号与系统调用的关系 208
8.2.7信号的复位 208
8.2.8处理僵死进程 209
8.3进程间通信 213
8.3.1管道 213
8.3.2 FIFO 217
8.3.3未提到的关于有名管道的一些注意事项 220
8.3.4消息队列 220
8.3.5共享内存 221
8.3.6信号量 221
8.4小结 225
8.5思考与练习 226
第9章 异常处理 227
9.1异常处理基础 227
9.2函数调用的错误 227
9.2.1显示错误信息 230
9.2.2定义错误处理函数 233
9.3 I/O超时处理 233
9.3.1 alarm()函数 233
9.3.2 select()函数 236
9.4服务器和客户异常处理 238
9.5小结 244
9.6思考与练习 244
第四篇 高级网络编程技术 247
第10章IPv4和IPv6的互操作性 247
10.1概述 247
10.2 IPv4客户和IPv6服务器 248
10.3 IPv6客户和IPv4服务器 253
10.4 IPv6地址测试宏 255
10.5 IPv6_ADDRFORM套接口选项 257
10.6源代码的可移植性 258
10.7小结 265
10.8思考与练习 265
第11章 守护进程 266
11.1守护进程及其消息输出 266
11.1.1 syslogd守护进程 266
11.1.2 syslog函数 266
11.1.3实例演练 268
11.2守护进程的创建 269
11.2.1进程的建立 269
11.2.2调用setsid函数 270
11.2.3实例演练 270
11.3守护进程的相关配置 272
11.3.1配置文件 272
11.3.2环境变量 273
11.4守护进程的应用实例 274
11.5小结 278
11.6思考与练习 278
第12章 广播 279
12.1广播的概述 279
12.2广播地址 280
12.3单播和广播的比较 281
12.4 dg_cli函数的修改 284
12.5小结 286
12.6思考与练习 287
第13章 多播 288
13.1多播的概述 288
13.2多播地址 289
13.3多播和广播的比较 291
13.4广域网上的多播 294
13.5多播套接口选项 296
13.6发送和接收 298
13.7简单网络时间协议SNTP 300
13.8小结 304
13.9思考与练习 304
第14章 原始套接字 305
14.1创建原始套接字 305
14.1.1创建方法 305
14.1.2实例演练 306
14.2写原始套接字 307
14.2.1原始套接字的写操作 307
14.2.2实例演练 307
14.3读原始套接字 308
14.3.1原始套接字的读操作 308
14.3.2实例演练 308
14.4原始套接字程序实例 309
14.5小结 316
14.6思考与练习 316
第15章 路由套接字 317
15.1创建路由套接字 317
15.1.1数据链路套接字地址结构 317
15.1.2创建路由套接字 318
15.1.3实例演练 318
15.2写路由套接字 318
15.2.1路由套接字的写操作 318
15.2.2实例演练 320
15.3读取路由套接字 321
15.3.1路由套接字的读操作 321
15.3.2实例演练 322
15.4路由套接字实例 324
15.5小结 327
15.6思考与练习 327
参考文献 328