本节书摘来自异步社区《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网络与通信程序设计(第3版)》——1.4 网络应用程序设计基础相关推荐

  1. Windows网络与通信程序设计实验一:基于TCP的C/S通信仿真

    文章目录 Windows网络与通信程序设计实验一:基于TCP的C/S通信仿真 1. 实验要求: 1.1 实验目的介绍: 1.2 实验相关提示: 2. 实验环境准备: 3. 实验步骤和具体代码理解: 3 ...

  2. Windows 网络与通信程序设计 王艳平 Phoenix 金羽 防火墙

    终于成功了

  3. c语言程序设计试题汇编第三版勘误,c语言程序设计基础教程----勘误记录.pdf

    程序设计基础教程--C 语言版 勘误条目: 目录:2.3 节的"标识符"改到 1.7.1 节 第一章 C 语言程序设计基础 第二章 C 语言中的数据类型及其基本操作 P3317: ...

  4. python程序设计基础第二版pdf下载_Python程序设计基础董付国课后答案-Python程序设计基础第二版清华大学出版社PDF电子版完整高清版-精品下载...

    Python程序设计基础(第2版)完全面向Python 3.x,全部案例代码使用Python 3.5.x和Python 3.6.x编写,大部分内容也同样适用于Python 3.4.x.本书对Pytho ...

  5. 网络与通信程序设计-基于UDP的广播通信实例

    目录 实验内容和设计思想 实验的内容 UDP的设计思想 UDP的协议头部 UDP通信编程思想 UDP的工作流程 UDP编程收发函数 广播通信 广播模式设置 广播套接字 UDP Socket的使用过程 ...

  6. python语言程序设计基础第二版答案-python语言程序设计基础(第二版)第五章答案随笔...

    模板模式与策略模式/template模式与strategy模式/行为型模式 模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是 ...

  7. c程序设计语言第五单元,(C语言程序设计基础课件)第五单元循环结构程序设计.pptx...

    第五单元 循环结构程序设计;知识目标 了解goto语句以及用goto语句构成循环:掌握用while语句.do-while语句.for语句实现循环:熟悉循环语句的嵌套:掌握break语句和continu ...

  8. 中北大学c语言程序设计作业答案,2016年中北大学软件学院程序设计基础考研复试题库...

    一.选择题 1. 设有以下语句: 若要为变量chi 和ch2分别输入字符A 和B ,正确的输入形式应该是( ). A.A 和B 之间用逗号间隔 B.A 和B 之间不能有任何间隔符 C.A 和B 之间可 ...

  9. java程序设计图形题_面向对象与Java程序设计基础题目:设计一个程序可以一计算平面图形的面积和立体图形的体积。1.使用interface关键...

    共回答了15个问题采纳率:93.3% 1.shape接口: public interface Shape { double getArea(); } 2.shape2D接口: public inter ...

最新文章

  1. LeetCode419罗马数字转整数python
  2. ROS Kinectic 安装问题
  3. HDU 4267 A Simple Problem with Integers [树状数组]
  4. 海域动态监视监测管理系统_监视和管理备份系统
  5. java quartz
  6. html画布实现小球沿直线下落,[面向对象的案例]在canvas画布内实现小球的随机移动...
  7. 初创企业如何实现2天快速上线?
  8. 从零开始写javaweb框架笔记10-搭建轻量级JAVAWEB框架-确定目标
  9. Android ActivityManager类
  10. grafana mysql 变量_grafana之Variables变量的使用
  11. [Python] U盘检测并复制所需的文件
  12. JAVA后台生成海报分享图片(简单配置轻松生成)
  13. 腾讯全民wifi驱动 v1.1.923 官方版
  14. 华为云sql工程师评测答题[青铜+白银]
  15. 计算新闻传播学临摹作业_数据抓取与数据清洗(西安交大国家艺术基金数据可视化培训第34天)
  16. oauth2-怎么使用
  17. 微信php签名验证_微信小程序API 用户数据的签名验证和加解密
  18. 2022年百度竞价推广效果不好了?怎么做?
  19. 免费手机网站自助建站平台推荐
  20. 随风杂谈(长期更新)

热门文章

  1. 脑神经计算建模揭示前额叶皮层不同类型中间神经元在信息维持中的作用
  2. 用半机械器官,打开发育生物学领域的黑匣子
  3. 2019与下一个十年:我们将要放弃的和将要拥抱的
  4. 新技术:如何用VR训练机器人?
  5. 基于crc32实现的内存的代码校验
  6. 5.2基于JWT的令牌生成和定制「深入浅出ASP.NET Core系列」
  7. exchange 2013设置分层通讯簿(HAB)
  8. 【js】callback时代的变更
  9. linux磁盘满处理
  10. Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置