网络应用程序是计算机网络存在的理由——如果我们无法设想任何有用的应用程序,就不需要网络基础设施和协议来支持它们。 自从互联网诞生以来,确实创造了许多有用和有趣的应用程序。 这些应用程序是互联网成功背后的驱动力,激励着家庭、学校、政府和企业的人们将互联网作为他们日常活动不可或缺的一部分。<br />Internet 应用程序包括在 1970 年代和 80 年代流行的经典的基于文本的应用程序:文本电子邮件、远程访问计算机、文件传输和新闻组。 它们包括 1990 年代中期的杀手级应用程序万维网(World Wide Web),包括网上冲浪、搜索和电子商务。 新千年伊始,新的、极具吸引力的应用不断涌现,包括 IP 语音和视频会议,如 Skype、Facetime 和 Google Hangouts; 用户生成的视频(例如 YouTube)和点播电影(例如 Netflix); 以及多人在线游戏,如《第二人生》和《魔兽世界》。在同一时期,我们看到了新一代社交网络应用程序的出现——例如 Facebook、Instagram 和 Twitter——它们在 Internet 网络或路由器和通信链接之上创建了人际网络。最近,随着智能手机的到来和 4G/5G 无线上网的普及,出现了大量基于位置的移动应用程序,包括流行的签到、约会和道路交通预测应用程序(例如 Yelp、Tinder 和 Waz)、移动支付应用程序(例如微信和 Apple Pay)和消息应用程序(例如微信和 WhatsApp)。 显然,新的和令人兴奋的互联网应用并没有放缓。 也许本文的某些读者会创造下一代互联网杀手级应用程序!<br />在本章中,我们研究网络应用程序的概念和实现方面。 我们首先定义关键的应用层概念,包括应用程序、客户端和服务器、进程和传输层接口所需的网络服务。 我们详细研究了几个网络应用程序,包括 Web、电子邮件、DNS、点对点技术 (peer-to-peer,P2P) 文件分发和视频流。 然后,我们将介绍基于 TCP 和 UDP 的网络应用程序开发。 特别是,我们研究了套接字接口并在 Python 中演练了一些简单的客户端-服务器应用程序。 我们还在本章末尾提供了几个有趣的套接字编程作业。