《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(右)所示。
https://yqfile.alicdn.com/81ed737e80c67769f7cdf2249a0e2950e2f23653.png"
在讲述内核网络组件开发时,还需要下载安装Windows DDK工具,后面再详细说明。
编写网络程序,调试工具是必不可少的,这里推荐使用免费工具Dbgview,它可以方便地同时显示内核模式和用户模式下的调试信息。
一、前言 近期打算搞搞自动部署,因为是windows服务器,一些工具和系统支持都不是太好。最后发现ansible比较火,最重要的是他支持windows。本文主要就ansible 在windows使用环境搭建过程分享。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- Windows下Nginx的启动、停止等命令&Nginx 配置多域名&windows下设置Nginx开机自动启动
- Windows下Nginx的安装与配置
- windows中用命令行实现http下载网络文件
- Windows Store App 变形特效
- 网络爬虫之Windows环境Heritrix3.0配置指南
- MFC Windows 程序设计[171]之压缩解压小程序(附源码)
- MFC Windows 程序设计[218]之网络打印机(附源码)
- Windows系统虚拟内存文件和休眠缓存大小优化
- Windows之Chocolatey:windows下的apt-get即Chocolatey简介、安装、使用方法之详细攻略
- c语言之windows下判断网络是否连接(亲测可用)
- Windows 10更改计算机名验证名称报错出现“一般性网络错误”对话框
- macOS 挂载 windows 共享目录
- Windows网络编程
- C#创建Windows窗体应用程序实例12【文件管理】
- Windows安装WSL进行机器学习(windows和Ubuntu同时使用)
- Windows逆向安全(一)之基础知识(九)