具体描述
第一部分主要介绍网络编程基础知识。此部分主要论述Windows和Linux平台网络编程必备基础知识,未过多涉及不同操作系统特性。
第二部分和第三部分与操作系统有关。第二部分主要是Linux相关内容,而第三部分主要是Windows相关内容。从事Windows编程的朋友浏览第二部分内容后,同样可以提高技艺。
第四部分对全书内容进行总结,包含了作者在自身经验基础上总结的学习建议,还介绍了网络编程经典书籍。
作者简介
作者简介:
尹圣雨
曾为风投公司开发人员,因出版IT类书籍并开展相关讲座而闻名。2004年至今一直参与OpenGL ES图形库的建设和3D加速芯片的开发,以及Khronos Group(移动国际标准化财团)的标准制定相关业务,还参与手机DMB芯片的开发。现任(株)Axissoft公司CTO,致力于构建基于Web的解决方案。
ripeness21@gmail.com
译者简介:
金国哲
毕业于重庆大学计算机学院,2009年至今在延边大学计算机系任教。
主讲课程:Java程序设计、Android应用开发、Web程序设计等。
主要研究方向:跨语言检索、自然语言处理等。
曾主持并参与某部队入侵检测系统、论文自动采集及管理系统等多个软件开发项目。
目录信息
第1章 理解网络编程和套接字 2
1.1 理解网络编程和套接字 2
1.2 基于Linux的文件操作 9
1.3 基于Windows平台的实现 15
1.4 基于Windows的套接字相关函数及示例 18
1.5 习题 24
第2章 套接字类型与协议设置 26
2.1 套接字协议及其数据传输特性 26
2.2 Windows平台下的实现及验证 32
2.3 习题 35
第3章 地址族与数据序列 36
3.1 分配给套接字的IP地址与端口号 36
3.2 地址信息的表示 39
3.3 网络字节序与地址变换 42
3.4 网络地址的初始化与分配 45
3.5 基于Windows的实现 52
3.6 习题 57
第4章 基于TCP的服务器端/客户端(1) 59
4.1 理解TCP和UDP 59
4.2 实现基于TCP的服务器端/客户端 64
4.3 实现迭代服务器端/客户端 71
4.4 基于Windows的实现 77
4.5 习题 81
第5章 基于TCP的服务器端/客户端(2) 82
5.1 回声客户端的完美实现 82
5.2 TCP原理 91
5.3 基于Windows的实现 96
5.4 习题 99
第6章 基于UDP的服务器端/客户端 101
6.1 理解UDP 101
6.2 实现基于UDP的服务器端/客户端 103
6.3 UDP的数据传输特性和调用connect函数 109
6.4 基于Windows的实现 114
6.5 习题 117
第7章 优雅地断开套接字连接 118
7.1 基于TCP的半关闭 118
7.2 基于Windows的实现 124
7.3 习题 127
第8章 域名及网络地址 128
8.1 域名系统 128
8.2 IP地址和域名之间的转换 130
8.3 基于Windows的实现 136
8.4 习题 138
第9章 套接字的多种可选项 140
9.1 套接字可选项和I/O缓冲大小 140
9.2 SO_REUSEADDR 145
9.3 TCP_NODELAY 150
9.4 基于Windows的实现 152
9.5 习题 154
第10章 多进程服务器端 155
10.1 进程概念及应用 155
10.2 进程和僵尸进程 159
10.3 信号处理 165
10.4 基于多任务的并发服务器 173
10.5 分割TCP的I/O程序 178
10.6 习题 182
第11章 进程间通信 183
11.1 进程间通信的基本概念 183
11.2 运用进程间通信 188
11.3 习题 193
第12章 I/O复用 194
12.1 基于I/O复用的服务器端 194
12.2 理解select函数并实现服务器端 197
12.3 基于Windows的实现 206
12.4 习题 209
第13章 多种I/O函数 211
13.1 send & recv函数 211
13.2 readv & writev函数 221
13.3 基于Windows的实现 225
13.4 习题 229
第14章 多播与广播 230
14.1 多播 230
14.2 广播 236
14.3 基于Windows的实现 240
14.4 习题 242
第二部分 基于Linux的编程
第15章 套接字和标准I/O 246
15.1 标准I/O函数的优点 246
15.2 使用标准I/O函数 249
15.3 基于套接字的标准I/O函数使用 252
15.4 习题 254
第16章 关于I/O流分离的其他内容 255
16.1 分离I/O流 255
16.2 文件描述符的复制和半关闭 259
16.3 习题 264
第17章 优于select的epoll 265
17.1 epoll理解及应用 265
17.2 条件触发和边缘触发 273
17.3 习题 283
第18章 多线程服务器端的实现 284
18.1 理解线程的概念 284
18.2 线程创建及运行 287
18.3 线程存在的问题和临界区 296
18.4 线程同步 299
18.5 线程的销毁和多线程并发服务器端的实现 306
18.6 习题 312
第三部分 基于Windows的编程
第19章 Windows平台下线程的使用 316
19.1 内核对象 316
19.2 基于Windows的线程创建 317
19.3 内核对象的2种状态 322
19.4 习题 325
第20章 Windows中的线程同步 327
20.1 同步方法的分类及CRITICAL_SECTION同步 327
20.2 内核模式的同步方法 331
20.3 Windows平台下实现多线程服务器端 339
20.4 习题 343
第21章 异步通知I/O模型 344
21.1 理解异步通知I/O模型 344
21.2 理解和实现异步通知I/O模型 346
21.3 习题 356
第22章 重叠I/O模型 357
22.1 理解重叠I/O模型 357
22.2 重叠I/O的I/O完成确认 362
22.3 习题 370
第23章 IOCP 371
23.1 通过重叠I/O理解IOCP 371
23.2 分阶段实现IOCP程序 379
23.3 习题 387
第四部分 结束网络编程
第24章 制作HTTP服务器端 390
24.1 HTTP概要 390
24.2 实现简单的Web服务器端 394
24.3 习题 401
第25章 进阶内容 403
25.1 网络编程学习的其他内容 403
25.2 网络编程相关书籍介绍 404
索引 406
· · · · · · (收起)
读后感
本书最大的特点是程序例子足够多且能正常跑起来,内容对初学者友善,不会因为太难的内容而产生厌倦情绪。作为初学者,我是挺喜欢这本书的。 这本书另外一个好的地方是还同时介绍了Windows平台下的网络编程。那些Linux和Windows共有的一些接口,你会觉得,哦,原来也不是很难,...
本书最大的特点是程序例子足够多且能正常跑起来,内容对初学者友善,不会因为太难的内容而产生厌倦情绪。作为初学者,我是挺喜欢这本书的。 这本书另外一个好的地方是还同时介绍了Windows平台下的网络编程。那些Linux和Windows共有的一些接口,你会觉得,哦,原来也不是很难,...
本书最大的特点是程序例子足够多且能正常跑起来,内容对初学者友善,不会因为太难的内容而产生厌倦情绪。作为初学者,我是挺喜欢这本书的。 这本书另外一个好的地方是还同时介绍了Windows平台下的网络编程。那些Linux和Windows共有的一些接口,你会觉得,哦,原来也不是很难,...
可能很多人开始看网络编程都是用华章系列白色封面的那几本大厚书,那几本书实在不是初涉编程的新人能看懂的。 这本书对网络编程的讲解清晰直白,完全适合新手入门,写出了网络编程的每一个步骤,而且代码没有添加过多的异常处理以及其他让代码更健壮的部分。我觉得,在初学编程...
可能很多人开始看网络编程都是用华章系列白色封面的那几本大厚书,那几本书实在不是初涉编程的新人能看懂的。 这本书对网络编程的讲解清晰直白,完全适合新手入门,写出了网络编程的每一个步骤,而且代码没有添加过多的异常处理以及其他让代码更健壮的部分。我觉得,在初学编程...
用户评价
这本书最突出的特点是其对网络安全议题的整合深度,这一点在许多侧重于性能优化的网络编程书籍中是常常被忽视的。作者并非将安全作为一个独立的章节草草带过,而是将其融入到了每一层协议的讲解之中。比如,在讨论TLS/SSL握手流程时,书中详尽地解析了公钥加密、数字证书的验证过程,以及如何通过配置不同的密码套件来抵御中间人攻击。更进一步,书中还涉及了对应用层协议进行加固的实用技巧,例如如何使用哈希校验来确保数据完整性,以及如何识别和防御常见的DoS攻击模式——并非从防御者的角度,而是从一个开发者需要如何设计出不易被攻击的接口的角度来阐述。这种“攻击者思维”的融入,使得读者在构建网络服务时,能够自然而然地将安全校验的代码嵌入到正常的业务逻辑流程中,而不是事后“打补丁”。对于任何需要处理敏感数据传输的系统而言,这本书提供的安全视角无疑是提升系统可靠性和信任度的关键要素。
这本书在描述网络应用开发中常见的设计模式和架构思路时,展现出一种近乎哲学的思辨深度。它不仅仅是告诉你“怎么做”,更重要的是探讨了“为什么这么做,以及如果不这么做会有什么后果”。例如,在讨论连接管理时,书中对“长连接”与“短连接”的利弊进行了长达数十页的辩证分析,考虑了从TCP建立/关闭开销到Keep-Alive机制的实现细节,再到应用层心跳包设计中的定时器精度问题。这使得我们不再是被动地接受既有的设计范式,而是能够根据具体的业务场景——比如高频交易还是大文件传输——做出最恰当的技术选型。更让我印象深刻的是,书中对错误处理和健壮性设计的强调。很多技术书籍往往忽略了异常情况,但这本书却系统地梳理了各种网络错误码(如ECONNREFUSED、ETIMEDOUT)在不同操作系统下的细微差异,并给出了跨平台适配的编程建议。这对于编写高可用、能抵御各种网络“脏数据”的系统来说,是无价之宝。
这本关于网络编程的书籍,着实让我这个在协议底层摸爬滚打多年的老兵感到耳目一新。它没有像许多同类书籍那样,仅仅停留在概念的罗列和API的简单介绍上。相反,作者似乎花费了大量篇幅,深入剖析了在真实世界中,那些看似简单的Socket调用背后,操作系统内核是如何调度资源、管理数据流转的。我特别欣赏其中对于拥塞控制算法的详尽阐述,书中用直观的图示和精妙的伪代码,将TCP的AIMD、慢启动等机制的演变过程描绘得淋漓尽致。读完相关章节后,我对于那些偶尔出现的网络延迟和丢包现象,不再是束手无策地重启服务,而是能从协议栈的角度去定位问题的根源,甚至尝试在应用层进行更精细的流量塑形。尤其是在讨论多路复用技术时,作者没有止步于`select/poll`的传统用法,而是将`epoll`和`io_uring`的性能优势和底层设计思想进行了深入的对比,这对于我们这些追求极致性能的开发者来说,无疑是一份宝贵的参考资料。可以说,它提供了一个从应用视角俯瞰整个网络通信全貌的绝佳平台,远超我预期的技术深度。
坦率地说,这本书的排版和插图设计,给我的阅读体验打了一个大大的折扣。虽然内容本身在深度和广度上都值得称赞,但整体的视觉呈现显得过于陈旧和拥挤。许多关键性的数据结构图示,比如TCP状态机的转化流程,如果能采用更现代、更清晰的矢量图形来绘制,而不是那种略显粗糙的位图,效果会好很多。而且,书中对于代码示例的选取,似乎偏向于一个特定的、年代略显久远的编程环境,这使得我们在尝试直接编译和运行示例时,需要花费额外的精力去适配现代编译器或库的版本。例如,在讲述多线程网络服务模型时,作者对线程同步机制的介绍略显保守,没有充分体现现代语言(如Go或Rust)在并发模型上的革新带来的便利性。如果能将理论讲解与最新的工程实践案例相结合,并注重图文的现代化设计,这本书的价值将能得到更充分的展现,不至于让读者在吸收知识的同时,还需要忍受这种略显过时的载体。
我是一个刚踏入互联网技术领域不久的新手,抱着学习如何“发送和接收数据”的目的翻开了这本书,原本还担心内容会过于晦涩难懂,但令人惊喜的是,作者的叙事方式非常贴合初学者的认知曲线。他没有直接抛出复杂的协议头结构,而是先构建了一个清晰的“黑箱模型”,让我们先理解数据是如何在两台机器间‘走’的,然后再逐步打开这个黑箱,解释MAC地址、IP地址、端口号这些‘身份证’是如何在不同层级发挥作用的。特别是关于地址解析过程的讲解,书中通过一个生动的例子,将ARP请求的广播和响应过程描述得像一场寻人游戏,让抽象的概念立刻变得形象起来。虽然有些地方的细节处理可能不如专业参考书那样极致严谨,但对于构建起扎实的网络概念框架来说,这本书的入门引导做得极其出色。它成功地激发了我深入研究网络底层机制的兴趣,而不是让我感到被一堆专业术语淹没的挫败感。
读着很爽,给五分!
是本好书。
网络编程入门,友好到连不是cs毕业的也可以看懂
读着很爽,给五分!
简单