《Windows网络与通信程序设计(第3版)》——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,它可以方便地同时显示内核模式和用户模式下的调试信息。

时间: 2024-09-07 20:52:31

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

《Windows网络与通信程序设计(第3版)》——1.2 计算机网络参考模型

1.2 计算机网络参考模型 了解网络的相关概念之后,本节将讨论计算机网络中主机之间是如何进行通信的,以及各种通信协议之间的关系等. 1.2.1 协议层次为了降低设计难度,大部分网络都以层(layer或level)的形式组织在一起,每一层都建立在它的下层之上,使用它的下层提供的服务,下层对它的上层隐藏了服务实现的细节.这种方法几乎应用于整个计算机科学领域,也可以称为信息隐藏.数据类型抽象.数据封装.面向对象编程等. 一个机器上的第n层和另一个机器的第n层交流,所使用的规则和协定合起来称为第n层协议

《Windows网络与通信程序设计(第3版)》——2.3 Winsock编程详解

2.3 Winsock编程详解 使用TCP创建网络应用程序稍微复杂一些,因为TCP是面向连接的协议,需要通信双方首先建立一个连接.本节先以建立简单的TCP客户端和服务器端应用程序为例,详细说明Winsock的编程流程,然后再介绍较为简单的UDP编程. 2.3.1 Winsock编程流程 使用Winsock编程的一般步骤是比较固定的,可以结合后面的例子程序来理解它们. 1.套接字的创建和关闭 使用套接字之前,必须调用socket函数创建一个套接字对象,此函数调用成功将返回套接字句柄. SOCKET

《Windows网络与通信程序设计(第3版)》——第2章 Winsock编程接口2.1 Winsock库

第2章 Winsock编程接口 Winsock是Windows下网络编程的标准接口,它允许两个或多个应用程序在相同机器上,或者是通过网络相互交流.Winsock是真正的协议无关的接口,本章主要讲述如何使用它来编写应用层的网络应用程序. 2.1 Winsock库 Winsock库有两个版本,Winsock1和Winsock2.现在开发网络应用程序都使用Winsock2,需要在程序中包含头文件winsock2.h,它包含了绝大部分socket函数和相关结构类型的声明和定义.同时要添加的还有到WS2_

《Windows网络与通信程序设计(第3版)》——2.2 Winsock的寻址方式和字节顺序

2.2 Winsock的寻址方式和字节顺序 本节讲述在Winsock中主机地址信息的表示方法,以及相关的操作函数. 2.2.1 Winsock寻址 因为Winsock要兼容多个协议,所以必须使用通用的寻址方式.TCP/IP使用IP地址和端口号来指定一个地址,但是其他协议也许采用不同的形式.如果Winsock强迫使用特定的寻址方式,添加其他协议就不大可能了.Winsock的第一个版本使用sockaddr结构来解决此问题. struct sockaddr { u_short sa_family; c

《Windows网络与通信程序设计(第3版)》——第1章 计算机网络基础1.1 网络的概念和网络的组成

第1章 计算机网络基础 本章详细讲述网络程序设计中要用到的计算机网络方面的基础知识,包括各种网络术语.网络硬件设备.网络拓扑结构.网络协议等. 1.1 网络的概念和网络的组成 网络是各种连在一起的可以相互通信的设备的集合.本书讲述的网络是最常见的,将数亿计算机连接到一起的Internet.下面通过讲述组成Internet的基本硬件和软件来进一步明确计算机网络的概念. Internet是世界范围内的计算机网络,它不仅连接了PC.存储和传输信息的服务器,还连接了PDA.电视.移动PC等.所有的这些设

《Windows网络与通信程序设计(第3版)》——2.4 网络对时程序实例

2.4 网络对时程序实例 网络对时也就是从Internet上获得准确的时间,以此来校对本地计算机时钟.通过这样一个实例程序,大家可以初步了解协议和Winsock函数的具体应用. ** 2.4.1 时间协议(Time Protocol)** Time Protocol (RFC-868)是一种非常简单的应用层协议.它返回一个未格式化的32位二进制数字,这个数字描述了从1900年1月1日午夜到现在的秒数.服务器在端口37监听时间协议请求,以TCP/IP或者UDP/IP格式返回响应.将服务器的返回值转

《Windows网络与通信程序设计(第3版)》——1.3 网络程序寻址方式

1.3 网络程序寻址方式 编写网络程序,必须要有一种机制来标识通信的双方.本节详细讨论Internet中各层的寻址方式,以及相关的寻址协议. 1.3.1 MAC地址网络通信的最边缘便是LAN了,我们先来看看在LAN中是如何寻址的. 1.MAC子层和MAC地址LAN主要使用广播通信.在其内部,许多主机连在相同的通信通道上,通信时的关键问题是当竞争存在时如何决定谁使用通道.解决此问题的协议属于链路层的子层,称为MAC(Medium Access Control,介质访问控制)子层.MAC子层在LAN

《C语言程序设计》一第 2 章 C程序设计基础

第 2 章 C程序设计基础 (3)输入10个数,找出最大和最小的数,并打印出来.本章通过范例程序分析C结构化程序的基本结构,介绍C程序设计的基本知识.通过本章的学习,应该了解程序的基本结构,熟悉基本的数据类型,会定义变量并了解变量在内存的存放,会使用算术运算符和赋值运算符进行计算,能使用输入/输出函数输入/输出数据,编写出简单的程序.

Windows Sockets网络编程(三) WINDOWS SOCKETS 1.1 程序设计

一.简介 WINDOWS SOCKETS是从 Berkeley Sockets 扩展而来的,其在继承 Berkeley Sockets的基础上,又进行了新的扩充.这些扩充主要是提供了一些异步函数,并增加了符合WINDOWS消息驱动特性的网络事件异步选择机制. WINDOWS SOCKETS由两部分组成:开发组件和运行组件. 开发组件:WINDOWS SOCKETS 实现文档.应用程序接口(API)引入库和一些头文件. 运行组件:WINDOWS SOCKETS 应用程序接口的动态链接库(WINSO