前言 现代的信息产业延伸到了世界的每个角落,对人类社会的重要性不言而喻,而网络通信则是信息产业的基础,无论是过去还是现在,网络通信都支撑起了社会的高速发展,在可预见的未来,这个趋势还将一直持续下去。 作为软件开发的从业者,我自然深知网络开发的重要性,几十年来的开发工作也一直和网络通信相关,在仓颉语言内测期间,深入研究了内置的网络开发库,从中感受到了强大的网络通信处理功能,有点遗憾的是,关于仓颉网络库的资料较少,毕竟仓颉推出时间有限,所以决定编写一本仓颉语言网络编程的实战书籍。 在编写本书时,并不仅局限在仓颉类库的使用上,而是以帮助读者系统地掌握网络编程为目标,从基础原理讲起,分析问题出现的原因,剖析各种解决方案,最后落脚到仓颉语言的实现上,从而形成一个问题发现、分析、解决、实现的闭环。在本书的整个篇幅中,仓颉语言的内容占比只有一半左右,其他关于网络基础概念、抓包工具、问题分析的内容同样重要,即使把这些内容应用在其他语言上也是合适的,这也是本书的读者并不局限于仓颉语言后端开发者的原因。 仓颉语言本身在快速迭代中,类库的具体实现也可能有所调整,再加上作者水平有限,所以书中难免有疏漏的地方,还请读者海涵。 本书主要内容 第1章网络编程基础,介绍了计算机网络的层次结构和IP地址、MAC地址等基础概念。 第2章网络报文分析工具,讲解了Wireshark和Fiddler的基本用法,这些工具是报文分析和网络调试必不可少的,在后续章节中会经常使用。 第3章TCP/IP,分别讲解了TCP、UDP和IP,通过分析报文格式掌握协议的使用规范,还重点讲解了TCP三次握手和四次挥手的过程以及TCP/IP高级选项的用法。 第4章Socket网络通信,详细地介绍了Socket相关类库的使用,并演示了简易SMTP客户端的实现;最后介绍了经典的回显服务器(又名回声服务器),并分别通过TCP和UDP实现。 第5章粘包问题及解决方法。粘包对于网络编程的初学者来说,是一个比较难解决的问题。本章从粘包产生的原因开始分析,逐步讲解解决粘包问题的多种方法。 第6章基于缓冲区的高效网络I/O,通过对比的方式演示是否使用缓冲区对网络I/O的影响,最后从原理出发讲解缓冲区的实现。 第7章非阻塞Socket通信,首先通过餐厅取餐类比阻塞与非阻塞,然后讲解非阻塞的实现,最后通过单线程处理一万个并发连接的示例演示非阻塞的强大能力。 第8章TLS与数字证书,通过人类社会通信的演化史讲解安全通信遇到的挑战及这些问题的解决方案,从而引出TLS通信及数字证书的必要性,最后讲解如何实现自签名数字证书。 第9章安全网络通信,介绍了仓颉语言常用的安全相关类库,并且以示例形式演示了编程实现数字证书的签发,最后基于TlsSocket实现了通信安全的回显服务器。 第10章HTTP。HTTP是应用最广泛的通信协议之一。本章介绍了HTTP演进的历史及各版本的消息结构,最后整理出请求方法、状态码、首部字段、首部压缩静态表等多个备查表格,方便查阅使用。 第11章HTTP服务器端,介绍了服务器端相关类库的使用方法,通过3个综合示例演示了HTTPS服务器端、基本身份认证及Cookie身份认证的实现。 第12章HTTP客户端,介绍了客户端相关类库的使用方法,通过模拟自动登录并下载服务器端文件的示例,演示了网络爬虫的基本实现。 第13章WebSocket,首先介绍了WebSocket握手过程及帧结构,然后介绍了基于HTML5的WebSocket API及仓颉语言的WebSocket类库,最后通过加密的多端聊天室示例演示WebSocket的用法。 致谢 感谢华为仓颉语言开发团队的辛苦工作,虽然仓颉语言历经数次延迟发布,但仍然初心不改、负重前行,其中的无奈、毅然和坚持,我也感同身受。 还要特别感谢清华大学出版社赵佳霓编辑,仓颉语言因为本身迭代,审校的工作增加了数倍,出版的时间也一再推迟,对此赵编辑还是一如既往地全力支持,再次表示感谢。 作者2024年12月于青岛