《Windows网络与通信程序设计(第3版)》——1.4 网络应用程序设计基础

简介:

本节书摘来自异步社区《Windows网络与通信程序设计(第3版)》一书中的第1章,第1.4节,作者: 陈香凝 , 王烨阳 , 陈婷婷 , 张铮 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 网络应用程序设计基础

本节讲述网络应用程序设计的原则和网络程序开发环境的设置。

1.4.1 网络程序体系结构
在创建网络应用程序之前,首先要决定应用程序的体系结构。应用程序体系结构(application architecture)由应用程序开发者设计,它指定了在各种各样的终端系统上,应用程序是如何组织的。本节介绍现有的主要体系结构:客户机/服务器体系结构、P2P体系结构和这两种结构的混合。

1.客户机/服务器体系结构
在客户机/服务器体系结构中,有一个总是在运行的主机,称为服务器,它为来自其他许多称为客户的主机提供服务。客户主机可以随时打开和关闭。最通俗的例子就是Web应用程序:Web服务器总是打开的,等待客户端程序(如IE浏览器)的请求,通过向它们发送网页数据响应这些请求。客户机/服务器体系结构有如下两个特点:

(1)客户端程序之间并不直接交流信息,它们仅与服务器通信。

(2)服务器方有一个固定的、公开的地址,称为IP地址(后面要讨论)。

服务器有固定的地址,而且总是打开的,所以客户端程序才能通过向服务器地址发送封包与之进行通信。

2.P2P(Peer-to-Peer,点对点)体系结构
单纯的P2P体系结构中,不再有总是运行的服务器了,任意的两台主机对(称为peer)都可以直接相互通信。因为peer之间可以不经过特定的服务器通信,所以这个体系结构称为peer-to-peer,简写为P2P。在P2P结构中,不再需要任何机器总是打开的,也不再需要任何机器有固定的IP地址了。现在,网上有许多著名的P2P软件,如疯狂一时的BT、现今的eMule、倍受青睐的QQ等。

P2P体系结构的优点之一就是它的可伸缩性。例如,在P2P文件共享程序中,数万的peer也许会参与到其中,每个peer既作为服务器向其他peer提供资源,又作为客户端从其他peer下载文件。因此,每增加一个peer,不仅增加了对资源的需求,也增加了对资源的供给。

另一方面,P2P用户高度分散,它们难以管理。如,有一个重要的文件仅一个peer拥有,但是这个peer随时都有可能离开网络。

实际上,单纯使用P2P体系结构的程序很少,大都需要一个中心服务器来维护总体状态,初始化客户端之间的连接等,这可以算是两种体系结构的混合了。由于网络结构不同,防火墙设置各异,编程时还会遇到更多的问题,如如何穿过内网防火墙、如何穿过NAT等,后面会详细介绍。

1.4.2 网络程序通信实体
进程是通信的实体,它们在不同的终端系统上通过计算机网络来交流信息。发送进程创建消息,将之发送到网络,接收进程接收这些消息,发送响应。

1.客户和服务器进程
对于相互通信的两个进程,通常称一方为客户,另一方为服务器。在Web里,浏览器是客户进程,Web服务器是服务器进程。在P2P文件共享系统里,下载文件的peer称为客户,上传文件的peer称为服务器。下面给出客户和服务器进程的具体定义:

在一对进程的通信会话上下文中,初始化通信的进程称为客户,等待通信连接的进程称为服务器。

2.套接字(Socket)
从一个进程发送到另一个进程的任何消息都必须经过下层网络。进程从网络中接收数据,向网络发送数据都是通过它的套接字(Socket)来进行的。为了理解进程和套接字的关系,我们打个比方,进程好比是一个房子,套接字便是房子的门。当进程向其他主机中的进程发送消息时,它将消息推出门(套接字)进入网络。一旦消息到达目标主机,它穿过接收进程的门(套接字),传递给接收进程。所以,套接字便是主机内应用层和传输层的接口,也称为程序和网络间的API(Application Programming Interface,应用程序编程接口)。本书在讲述用户模式网络程序设计时,使用的主要是Windows提供的套接字接口。

1.4.3 网络程序开发环境
为了便于直接使用Windows提供的网络编程接口,深入了解Windows系统网络组件的层次结构,本书主要使用Visual C++ 6.0作为编程工具。为了使用Windows 2000/XP操作系统的新特性,用户可以更新SDK工具。笔者在编写这本书时使用的是Microsoft Windows Server 2003 SP1 SDK,其下载地址是http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

下载SDK并安装后,还要对Visual C++开发环境进行设置。单击菜单“Tools/Options...”,弹出Options对话框,选择Directories选项卡,首先在“Show directories for:”下拉菜单中选择Include files,将新SDK中头文件的目录添加到“Directories:”列表中,并将其移动到最上方,如图1.8(左)所示,然后在“Show directories for:”下拉菜单中选择Library files,进行同样的设置,如图1.8(右)所示。


<a href=https://yqfile.alicdn.com/81ed737e80c67769f7cdf2249a0e2950e2f23653.png" >

在讲述内核网络组件开发时,还需要下载安装Windows DDK工具,后面再详细说明。

编写网络程序,调试工具是必不可少的,这里推荐使用免费工具Dbgview,它可以方便地同时显示内核模式和用户模式下的调试信息。

相关文章
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
3月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
192 6
|
7月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
769 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
6月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
2月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
397 11
|
2月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
99 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
7月前
|
存储 SQL 运维
中国联通网络资源湖仓一体应用实践
本文分享了中国联通技术专家李晓昱在Flink Forward Asia 2024上的演讲,介绍如何借助Flink+Paimon湖仓一体架构解决传统数仓处理百亿级数据的瓶颈。内容涵盖网络资源中心概况、现有挑战、新架构设计及实施效果。新方案实现了数据一致性100%,同步延迟从3小时降至3分钟,存储成本降低50%,为通信行业提供了高效的数据管理范例。未来将深化流式数仓与智能运维融合,推动数字化升级。
333 0
中国联通网络资源湖仓一体应用实践
|
3月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
249 0
|
3月前
|
安全 Linux
利用Libevent在CentOS 7上打造异步网络应用
总结以上步骤,您可以在CentOS 7系统上,使用Libevent有效地构建和运行异步网络应用。通过采取正确的架构和代码设计策略,能保证网络应用的高效性和稳定性。
134 0
|
6月前
|
安全 测试技术 Linux
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件
231 2
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件