第01章-网络应用编程入门知识_第1页
第01章-网络应用编程入门知识_第2页
第01章-网络应用编程入门知识_第3页
第01章-网络应用编程入门知识_第4页
第01章-网络应用编程入门知识_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

工业和信息化部“十二五”规划教材

普通高等学校“十二五”规划教材

《C#网络应用编程》第3版

第1章网络应用编程基本知识2Ch1C#代码编写基础1.1安装VS2012开发环境1.2网络应用编程模型1.3TCP/IP网络协议1.4IP地址转换与域名解析1.5网卡信息检测与网络流量检测1.1安装VS2012开发环境1.操作系统要求调试本书源程序的操作系统和内存要求如下。(1)操作系统:Windows7(32位或64位),建议使用64位Windows7。(2)内存:至少2GB。2.安装VS2012和VS2012Update4本书源程序都在VS2012简体中文旗舰版开发环境下调试通过。安装VS2012后,还需要继续安装VS2012Update4;从微软的网站上下载VS2012Update4后直接安装即可;Update4已经包含了Update1、Update2和Update3,因此不需要安装Update4之前的这些补丁。1.2网络应用编程模型1.2.1互联网与企业内部网1.2.2分散式、集中式和分布式1.2.3C/S模式1.2.4B/S模式1.2.5网络应用程序编程模型1.2.1互联网与企业内部网“网络”有两个含义:一个是互联网,另一个是企业内部网。本课程主要介绍C/S模式的网络应用编程;B/S编程可参考十二五规划教材《HTML5与ASP.NET程序设计教程》(马骏主编,人民邮电出版社出版)1.互联网(Internet)互联网(Internet)是一种覆盖全世界的全球性互联的网络。2.企业内部网(Intranet)企业内部网(Intranet)是互联网的另一种体现形式。将企业内部的网络和企业外部的网络通过防火墙有效隔离,每个Intranet都变成了一个相对独立的网络环境。1.互联网(Internet)互联网(Internet)是一种覆盖全世界的全球性互联的网络。互联网的最大特点相互连接的网络都使用同一组通用的协议(TCP/IP协议簇),从而形成逻辑上的单一巨大国际网络。互联网的特点支持资源共享、采用分布式控制技术、采用分组交换技术、使用通信控制处理机、采用分层的网络通信协议。互联网并不等同万维网(WorldWideWeb),它只是互联网所提供的服务的其中一部分万维网是一种使用超文本传输协议相互链接而成的全球性系统。2.企业内部网(Intranet)企业内部网(Intranet)是互联网的另一种体现形式。每个Intranet都变成了一个相对独立的网络环境。这种网络采用的仍然是Internet标准;它将企业内部的网络和企业外部的网络通过防火墙有效隔离。例如,某家公司的多个分公司分布在不同的国家,总公司与分公司之间以及分公司与分公司之间建立Intranet后,公司内部的应用程序仍然通过Internet快速交互。但是,由于防火墙的作用,公司外部的用户则无法访问它,外部用户只能访问公司对外公开的内容。1.2.2分散式、集中式和分布式早期计算机网络的数据通信模型分散式(Decentralized)集中式(Centralized)分布式(Distributed)分散式、集中式和分布式的例子:一座大楼的房间制暖问题分散式:每个房间自己决定制暖设备的配备,各房间的自主性大,但大楼管理员无法统一控制用电量;集中式:整座大楼配备中央空调,所有房间的温度由大楼管理员来负责,这种方式管理方便,但办公室却没有了自主调温能力;分布式:整座大楼配备中央空调,每个房间安装温度控制器,管理员能通过中央空调统一控制,各房间也可根据情况调节温度。数据通信模型(一)——分散式分散式系统用户只负责管理自己的计算机系统,各自独立的系统之间没有资源或信息的交换或共享。缺点存在大量共享数据的重复存储;容易导致一个企业组织内各部门数据的不一致性;会造成硬件、支持和运营维护等成本的大量增加。早已经被淘汰。数据通信模型(二)——集中式集中式系统一台计算机(称为主机)保存一个企业组织的全部数据,而用户则通过多个终端连接到这台主机。终端本身并不具备处理信息的能力。优点所有运作和管理都由一台主机来控制,硬件成本低;资源集中、数据共享,减小或消除了数据的冗余与不一致性。缺点可靠性问题,一旦主机出现故障,系统就全部瘫痪;多个用户访问时,系统响应慢,不能充分满足不同部门或用户的需要,也无法满足某些部门的特殊需求。数据通信模型(三)——分布式系统分布式系统是分散式系统和集中式系统的混合体;将分散在网络环境中的各种资源以一个整体的形式呈现给用户,以全局方式管理系统资源;根据用户需要动态分配任务,为用户任意调度网络资源;在这个过程中,用户的操作体验就像是正在使用单机工作一样。调度过程对用户来说是“透明”的。分布式系统与计算机网络的主要区别是软件而不是硬件。例如:用户打开并编辑一个文件在分布式系统中,系统自动调度文件,用户并不知道该文件到底保存在网络中的哪台计算机上在计算机网络中,用户必须先知道保存该文件的远程主机,然后与该远程主机连接,再传送该文件到本机,才能进行编辑。1.2.3C/S模式C/S(Client/Server)也叫C/S模式、C/S架构或C/S模型它是在分布式的基础上进一步抽象出来的编程模型。1.C/S模式及其特点胖客户端应用程序编程架构,

其主要工作都在客户端运行;例如QQ、飞信、360安全卫士等客户端软件。2.C/S应用程序编程模型面向服务的体系架构(SOA),WCF是其中一种具体实现技术。编写服务端应用程序建议使用WCF;编写客户端应用程序建议使用WPF应用程序。3.C/S网络编程建议的做法C/S模式及其特点C/S将一个网络事务处理分为两部分客户端(Client,也叫客户机)用于为用户提供操作,同时向网络提供请求服务的接口;服务端(Server)负责接收并处理客户端发出的服务请求,并将服务处理结果返回给客户端。C/S既适用于实际的应用程序,又适用于真正的计算机部署。从程序实现的角度来说,客户端和服务端实际是计算机上的两个进程的交互。服务端进程逐一等待并处理客户端请求。运行服务端进程的计算机系统一般通过所提供的服务来命名。例如,提供邮件服务的主机称为邮件服务器,提供远程文件访问的计算机称为文件服务器等。1.2.4B/S模式B/S(Browse/Server)也叫B/S模式或B/S模型在分布式系统基础上抽象

出来的网络通信模型;仅使用HTTP(Hypertext

TransferProtocol,超文

本传送协议)进行通信。B/S编程模型一般采用三层架构设计,由用户界面、逻辑处理和数据支持构成。B/S模式的应用程序也称为Web应用程序。B/S模式的优点是单台计算机可以访问任何Web服务器。其客户端应用程序是一种通用的浏览器。只需要知道服务器的网址(IP地址或域名)即可访问。1.2.5网络应用程序编程模型网络应用程序的编程模型分类从外部表现形式上分:控制台界面、Windows窗体界面、Web窗体界面;从NET实现技术上分:控制台应用程序、WinForm应用程序、WPF应用程序、Windows应用商店应用程序(仅适用于Windows8)、基于ASP.NET的Web应用程序以及面向服务的WCF应用程序;1.C/S客户端应用程序编程模型WPF是编写在Windows7、Windows8操作系统上运行的C/S客户端应用程序编程模型。WPF整合了Windows窗体和Web窗体,为用户界面、2D/3D图形、文档、音频和视频等提供了统一的界面描述和操作方法。使用WPF技术设计的代码基本上是一样的,大大缩小了Windows应用程序和Web应用程序之间的差别。另外,基于DirectX技术的WPF不仅带来了绚丽的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面。本书所有的客户端程序例子都用WPF应用程序来实现。2.C/S服务端应用程序编程模型面向服务的C/S服务端应用程序,建议用WCF服务应用程序。控制台应用程序、WinForm或者WPF应用程序的练习可以方便观察和理解相关的概念和实现原理服务器的用途是为客户端程序提供各种服务,在实际的应用开发中,一般不会将运行监视等功能放到服务端来实现。网络管理员的职责处理服务器运行过程中出现的不正常情况;而不是为了让网络管理员去调试或运行某个服务器程序;管理员通过专用的客户端程序去操作,而不是直接到服务器上去操作;3.B/S应用程序编程模型B/S应用程序编程模型(Web应用程序)主要有:ASP.NET;Silverlight;WPF浏览器应用程序;适用于企业内部网,即通过https来访问而不是通过http来访问1.3TCP/IP网络协议1.3.1TCP/IP基本概念1.3.2传统的网络编程技术简介1.3.1TCP/IP基本概念TCP/IP网络模型采用4层结构,分别为:应用层、传输层、网际层和网络接口层。各个层次的功能和对应的常用网络协议如下表。层次名称功

能协

议应用层(ApplicationLayer)负责实现与应用程序相关的功能FTP(文件传输协议)HTTP(超文本传输协议)DNS(域名服务器协议)SMTP(简单邮件传输协议)NFS(网络文件系统协议)传输层(Transport

Layer)负责提供节点间的数据传送以及应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等TCP(控制传输协议)UDP(用户数据报协议)网际层(Inter-networkLayer)负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机,但它不检查数据包是否被正确接收IP(网际协议)ICMP(网际控制消息协议)ARP(地址解析协议)RARP(反向地址解析协议)网络接口层(Host-to-NetLayer)负责实际数据的传输HDLC(高级链路控制协议)PPP(点对点协议)SLIP(串行线路接口协议)1.3.2传统的网络编程技术简介网络应用程序若要侦听网络并发送请求,需要添加命名空间System.Net.Sockets的引用该命名空间中提供TcpClient类、TcpListener类和UdpClient类;封装了不同传输协议建立连接的实现细节,提供了多种传输数据的操作方法。若要在套接字级别进行控制,可直接用该命名空间下的Socket类。用这些传统技术编写网络应用程序的门槛较高;对计算机网络的实现原理非常熟悉,还要有丰富的网络编程经验;在本书后续的章节中,主要学习新的网络编程技术。这些新技术都是以传统技术为基础的。1.套接字编程(Socket类)套接字是支持TCP/IP网络通信的基本操作单元;在一个套接字实例中,保存:本机的IP地址和端口、对方的IP地址

和端口、双方通信采用的网络协议等信息。套接字有3种不同的类型(System.Net.Sockets命名空间下的Socket类)流式套接字:实现面向连接的TCP通信数据报套接字:实现无连接的UDP通信原始套接字:实现IP数据包通信以上套接字均可用来实现。基于TCP和UDP的应用程序中,使用TcpListener类、TcpClient类或UdpClient类,和使用Socket类来实现都是可以的。而编写自定义的新网络协议程序时,则只能用Socket类来实现。2.TCP应用编程(TcpClient类、TcpListener类)

IP连接领域有两种通信类型:面向连接的(Connection-Oriented)和无连接的(Connectionless)。在面向连接的套接字中,使用TCP来建立两个IP地址端点之间的会话。一旦建立了这种连接,就可以在设备之间进行可靠的数据传输。对于网络应用程序而言,在System.Net.Sockets命名空间下,除了套接字以外,.NET框架还提供了TcpClient类和TcpListener类。这些类封装了不同传输协议建立连接的细节,提供了多种传输数据的操作方法。虽然TcpClient类和TcpListener类对套接字做了进一步的封装,在一定程度上简化了代码编写的复杂度,但是,仍然需要程序员编写大量的实现代码。3.UDP应用编程(UdpClient类)UDP使用无连接的套接字,无连接的套接字不需要在网络设备之间发送连接信息。因此,在程序中很难确定有哪些服务器和客户端。UdpClient类是在UDP层面对套接字编程的进一步封装。它同样在一定程度上简化了代码编写的复杂度,但是,也同样需要程序员编写大量的实现代码。4.其他传统的网络应用编程技术HTTP应用编程FTP应用编程SMTP与POP3应用编程P2P应用编程这些传统编程技术的实现在本书第2版都做了相应的介绍。了解这些传统技术的基本实现思路,对进一步理解新的网络编程技术会非常有帮助。1.4IP地址转换与域名解析1.4.1IP地址与端口1.4.2IP地址转换相关类1.4.3域名解析IP地址转换与域名解析相关的类都在System.Net命名空间下1.4.1IP地址与端口在网络上,识别远程主机的信息主要由两部分组成:一是主机标识,用于识别与本地计算机通信的是哪台远程主机;二是端口号,用于识别和远程主机的哪个进程通信。1.IP地址在因特网中,每台联网的主机都要有一个在全世界范围内唯一的标识,该标识称为IP地址。2.端口IP地址仅仅能够识别到某台主机,而不能识别该主机上的进程;如果要进一步识别是哪个进程,还需要引入新的地址空间,这就是端口(Port)。1.IP地址一个IP地址主要由两部分组成:一部分用于识别该地址所属的网络号,另一部分指明网络内的主机号。网络号由Internet权力机构分配,主机号由各个网络的管理员统一分配。(1)IPv4编址方案由4个字节(十进制表示)组成的二进制值进行识别,中间用圆点分开,这种方法叫做点分十进制表示法。(2)IPv6编址方案每个IP地址有16个字节(128位二进制数),其完整格式用8段16进制表示,各段之间用冒号分隔。5类IPv4的IP地址A类:0.x.x.x~127.x.x.x (32位二进制最高位为0)由1字节的网络地址和3字节的主机地址组成;一个特殊的IP地址,即,该地址专用于本机回路测试;B类:128.x.x.x~191.x.x.x (32位二进制最高2位为10)由2字节的网络地址和2字节的主机地址组成;C类:192.x.x.x~223.x.x.x (32位二进制最高3位为110)由3字节网络地址和1字节主机地址组成,适用于小规模的局域网;D类:224.x.x.x~239.x.x.x (32位二进制最高4位为1110)一种特殊类型的IP地址:多点广播地址;E类:240.x.x.x~255.x.x.x (32位二进制最高5位为11110)特殊用途备用;IPv6编址方案简化表示形式每段中前面的0可以省略连续的0可省略为“::”但只能出现一次。例如:

1080:0:0:0:8:800:200C:417A简写为1080::8:800:200C:417AFF01:0:0:0:0:0:0:101简写为FF01::1010:0:0:0:0:0:0:1简写为::10:0:0:0:0:0:0:0简写为::本机回环地址:IPv4为,IPv6为::1另外,IPv6没有定义广播地址,其功能由多播地址替代。2.端口端口有两种含义:一是指物理意义上的端口,如ADSLModem、集线器的接口;二是指逻辑意义上的端口,即进程标识,端口号的范围从0到65535,比如用于HTTP的80端口,用于FTP的21端口等。在本书中的端口均指逻辑意义上的端口。端口是为了解决与多个进程同时进行通信的问题。可用端口地址的范围是十进制的0~65535。端口地址用两字节二进制数来表示;1000以内的端口号大多被标准协议所占用;应用程序中可以自由使用的端口号一般都使用大于1000的值。1.4.2IP地址转换相关类网络中两台计算机通信时,必须知道对方的IP地址和端口号以及采用的网络通信协议;在某些应用中,可能还需要检测与网卡相关的信息。复杂的网络应用程序中,需要掌握几个最基本的类:1、提供网际协议IP地址的IPAddress类;2、包含IP地址和端口号的IPEndPoint类;3、为Internet或Intranet主机提供信息容器的IPHostEntry类。1.IPAddress类(1/2)位于System.Net命名空间下;提供了对IP地址的转换和处理功能。静态Parse方法将IP地址字符串转换为IPAddress的实例。例如:如果IP地址字符串格式不正确,调用Parse方法时会出现异常。Try{IPAddressip=IPAddress.Parse("6");}Catch{MessageBox.Show("请输入正确的IP地址!");}1.IPAddress类(2/2)另外,利用该实例的AddressFamily属性可判断该IP地址是IPv6还是IPv4。例如:IPAddress类还提供了7个只读字段,分别代表程序中使用的特殊IP地址。IPAddressip=IPAddress.Parse("::1");if(ip.AddressFamily==AddressFamily.InterNetworkV6){MessageBox.Show("这是IPv6地址");}IPAddress类常见只读字段名

称说

明Any提供一个IPv4地址,指示服务端应侦听所有网络接口上的客户端活动,它等效于Broadcast提供IPv4网络广播地址,它等效于55IPv6Any提供所有可用的IPv6地址IPv6Loopback表示系统的IPv6回环地址,等效于::1IPv6None提供不使用任何网络接口的IP地址Loopback表示系统的IPv4回环地址,等效于None表示Socket不应侦听客户端活动(不使用任何网络接口)2.IPEndPoint类IPEndPoint是与IPAddress概念相关的一个类,它包含应用程序连接到主机上的服务所需的主机和端口信息。它由两部分组成,一个是主机IP地址,另一个是端口号。IPEndPoint类的构造函数之一为:publicIPEndPoint(IPAddressaddress,intport);其中,第一个参数指定IP地址,第二个参数指定端口号。例如:IPAddresslocalAddress=IPAddress.Parse("");IPEndPointiep=newIPEndPoint(localAddress,65000);strings1="IP地址为:"+iep.Address;strings2="IP端口为:"+iep.Port;3.IPHostEntry类IPHostEntry类将一个域名系统(DNS)的主机名与一组别名和一组匹配的IP地址关联。该类一般和Dns类一起使用。常用属性AddressList属性获取或设置与主机关联的IP地址列表(包括IPv4和IPv6)HostName属性包含了指定主机的主机名静态方法GetHostEntry()及其AddressList属性获取本地或远程主机的IP地址列表。例如://获取搜狐服务器的所有IP地址IPAddress[]ips= Dns.GetHostEntry(“”).AddressList;1.4.3域名解析IP地址:能够唯一地标识网络上的计算机的数字型地址;域名:用字符型的名字来标识IP;字符型地址、域名地址,简称域名(DomainName)域名解析:将域名转换为对应IP地址的过程;DNS(DomainNameSystem,域名系统)是因特网的一项核心服务,它可以将域名和IP地址相互转换。互联网中存在一些装有域名系统的域名服务器,上面分层次存放许多域名到IP地址转换的映射表。System.Net命名空间下的Dns类提供了方便的域名解析功能,可利用它从Internet域名系统检索指定主机的信息。Dns类常用的静态方法方法名称说

明GetHostAddresses返回指定主机的Internet协议IP地址,与该方法对应的还有异步方法GetHostEntry将主机名或IP地址解析为IPHostEntry实例,与该方法对应的还有异步方法GetHostName获取本地计算机的主机名.NET框架既提供了同步获取的方法,也提供了异步获取的方法。本章只介绍Dns类的同步方法,关于异步操作的用法在后面的章节中再介绍。(1)GetHostAddresses方法利用GetHostAddresses方法可以获取指定主机的IP地址,该方法返回一个IPAddress类型的数组。方法原型为publicstaticIPAddress[]GetHostAddresses(stringhostNameOrAddress);参数中的hostNameOrAddress表示要解析的主机名或IP地址。例如:IPAddress[]ips=Dns.GetHostAddresses("");若hostNameOrAddress是IP地址,则直接返回此地址;

若hostNameOrAddress是空字符串,则返回所有IPv4和IPv6地址。例如:IPAddress[]ips=Dns.GetHostAddresses("");//获取本机的所有IP地址(2)GetHostEntry方法GetHostEntry方法可返回一个IPHostEntry实例,用于在DNS服务器中查询与某个主机名或IP地址关联的IP地址列表。方法原型为publicstaticIPHostEntryGetHostEntry(stringhostNameOrAddress)参数中的hostNameOrAddress表示要解析的主机名或IP地址。当参数为空字符串时,返回本地主机的IPHostEntry实例。例如:IPHostEntryhost=Dns.GetHostEntry("");varipAddresses=host.AddressList;//获取本机所有IP地址stringname=host.HostName;//获取本机主机名(3)GetHostName方法该方法用于获取本机主机名。例如:stringhostname=Dns.GetHostName();【例1-1】演示IPAddress类、Dns类、IPHostEntry类和IPEndPoint类的使用方法,显示中央电视台所有服务器的IP地址信息和本机主机名及相关的IP地址。运行效果如图1-3所示。1.5网卡信息检测与网络流量检测1.5.1网卡信息检测相关类1.5.2网络流量检测相关类1.5.1网卡信息检测相关类1.NetworkInterface类位于System.Net.NetworkInformation命名空间下;可以检测本机有多少个网络适配器、哪些网络连接可用,并可获取某个网络适配器的型号、MAC地址和速度等信息。获取网络适配器相关信息时,要先构造NetworkInterface对象。注意不能直接使用new关键字构造该类的实例,而用该类提供的静态GetAllNetworkInterfaces方法得到NetworkInterface类型数组。每个网络适配器,都包含一个NetworkInterface对象与之对应。例如:NetworkInterface[]adapters= NetworkInterface.GetAllNetworkInterfaces();NetworkInterface类常用的属性和方法名

称说

明Name属性获取网络适配器的名称Speed属性获取网络适配器的速度(bit/秒)GetAllNetworkInterfaces方法返回描述本地计算机上的所有网络适配器对象语法:publicstaticNetworkInterface[]GetAllNetworkInterfaces()GetIPProperties方法描述此网络适配器配置的对象语法:publicabstractIPInterfacePropertiesGetIPProperties()GetIPv4Statistics方法获取IPv4统计信息语法:publicabstractIPv4InterfaceStatisticsGetIPv4Statistics()GetIsNetworkAvailable方法指示是否有任何可用的网络连接语法:publicstaticboolGetIsNetworkAvailable()GetPhysicalAddress方法返回适配器的媒体访问控制(MAC)地址语法:publicabstractPhysicalAddressGetPhysicalAddress()Supports方法指示接口是否支持指定的协议(IPv4或IPv6)如果支持则为true2.IPInterfaceProperties类IPInterfaceProperties类提供了检测IPv4和IPv6的网络适配器地址信息,利用该类可检测本机所有网络适配器支持的各种地址,如DNS服务器的IP地址、网关地址以及多路广播地址等。IPInterfaceProperties是一个抽象类,不能直接创建该类的实例,而是通过调用NetworkInterface对象的GetIPProperties方法得到该类的实例。例如:NetworkInterface[]adapters= NetworkInterface.GetAllNetworkInterfaces();IPInterfacePropertiesadapterProperties= adapters[0].GetIPProperties();IPInterfaceProperties类常用的属性和方法名

称说

明AnycastAddresses属性获取分配给此接口的任意广播IP地址DhcpServerAddresses属性获取此接口的动态主机配置协议(DHCP)服务器的地址DnsAddre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论