天天看点

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

本节书摘来自异步社区《windows网络与通信程序设计(第3版)》一书中的第1章,第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 网络程序开发环境

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

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

https://yqfile.alicdn.com/81ed737e80c67769f7cdf2249a0e2950e2f23653.png" >

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

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

继续阅读