版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 1C#网络编程方法概述 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 2 2学习目标学习目标了解了解TCP/IPTCP/IP结构及其基本概念。结构及其基本概念。掌握掌握.NET.NET网络编程基础知识。网络编程基础知识。掌握套接字编程的基本原理。掌握套接字编程的基本原理。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 3 3本章内容本章内容5.1 TCP/IP5.1 TCP/IP概述概述 5.2 .NET5.2 .NET网络编程基础网络编程基础 5.3 5.3 套接字编程套接字编程 5.4 5.4 多线程编程多线程编程 5.5 5.5 基于多线程的编程实例基于多线程的
2、编程实例 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 4 45.1 TCP/IP5.1 TCP/IP概述概述 1OSI参考模型 在计算机网络产生之初,每个计算机厂商都有一套自己的网络体系结构的概念,它们之间互不兼容。为此,国际标准化组织(ISO)在1979年成立了一个分委员会来专门研究一种用于开放系统互连的体系结构(Open Systems Interconnection,OSI)。其中“开放”这个词表示:只要遵循OSI标准,一个系统可以和位于世界上任何地方的、也遵循OSI标准的其他任何系统进行连接。这个分委员会提出了开放系统互连,即OSI参考模型,它定义了连接不同类型计算机的标
3、准框架。 OSI参考模型将计算机网络通信定义为一个七层框架模型,如图5.1所示。这七层分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。图5.1 OSI参考模型5.1.1 OSI参考模型与TCP/IP模型第第5 5章章 C#C#网络编程方法概述网络编程方法概述 5 55.1 TCP/IP5.1 TCP/IP概述概述 各层的主要功能及其相应的数据单位如下:(1)物理层(Physical Layer) 要传递信息就要利用一些物理媒体,如双绞线、同轴电缆等,但具体的物理媒体并不在OSI的七层之内,有人把物理媒体当作第0层,物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、
4、电气、功能和过程特性。如规定使用电缆和接头的类型,传送信号的电压等。在这一层,数据还没有被组织,仅作为原始的位流或电气电压处理,单位是比特。(2)数据链路层(Data Link Layer) 数据链路层负责在两个相邻结点间的线路上,无差错地传送以帧为单位的数据。每一帧包括一定数量的数据和一些必要的控制信息。和物理层相似,数据链路层负责建立、维持和释放数据链路的连接。在传送数据时,如果接收点检测到所传数据中有差错,就要通知发送方重发这一帧。(3)网络层(Network Layer) 在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合
5、适的网间路由和交换结点,以确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息(源站点和目的站点地址的网络地址)。5.1.1 OSI参考模型与TCP/IP模型第第5 5章章 C#C#网络编程方法概述网络编程方法概述 6 65.1 TCP/IP5.1 TCP/IP概述概述 (4)传输层(Transport Layer) 传输层的任务是根据通信子网的特性来最佳地利用网络资源,并以可靠和经济的方式,为两个端系统(也就是源站和目的站)的会话层之间,提供建立、维护和取消传输连接的功能,并负责可靠地传输数据。在这一层,信息的传送单位是报文。(5)会话层(Ses
6、sion Layer) 会话层也称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,都统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。(6)表示层(Presentation Layer) 表示层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩,加密和解密等工作都由表示层负责。5.1.1 OSI参考模型与TCP/IP模型第第5 5章章 C#C#网络编程方法概述网络
7、编程方法概述 7 75.1 TCP/IP5.1 TCP/IP概述概述 (7)应用层(Application Layer) 应用层确定进程之间通信的性质以满足用户需要以及提供网络与用户应用软件之间的接口服务。 当然,OSI参考模型只是一个框架,它的每一层并不执行某种功能。在这个OSI七层模型中,每一层都为其上一层提供服务,并为其上一层提供一个访问接口或界面。不同主机之间的相同层次称为对等层。如主机A中的表示层和主机B中的表示层互为对等层,主机A中的会话层和主机B中的会话层互为对等层等。对等层之间互相通信需要遵守通信协议,主要通过软件来实现。每一种具体的协议一般都定义了OSI模型中的各个层次具体实
8、现的技术要求,主机正是利用这些协议来接收和发送数据的。 5.1.1 OSI参考模型与TCP/IP模型第第5 5章章 C#C#网络编程方法概述网络编程方法概述 8 85.1 TCP/IP5.1 TCP/IP概述概述 2TCP/IP模型 OSI参考模型的提出是为了解决不同厂商、不同结构的网络产品之间互连时遇到的不兼容性问题。但是该模型的复杂性阻碍了其在计算机网络领域的实际应用。与此相反,由技术人员自己开发的传输控制协议/网际协议(Transfer Control Protocol/Internet Protocol,TCP/IP)协议栈模型都获得了更为广泛的应用,成为因特网的基础。实际上,TCP/
9、IP协议也是目前因特网范围内运行的唯一一种协议。TCP/IP模型和OSI参考模型的对比示意图,如图5.2所示。 TCP/IP模型是美国国防部高级研究计划局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网使用的参考模型。ARPANET是由美国国防部(U.SDepartment of Defense,DoD)赞助的研究网络。最初,它只连接了美国境内的四所大学。但在随后的几年中,它通过租用的电话线连接了数百所大学和政府部门。最终ARPANET发展成为全球规模最大的互连网络因特网。 5.1.1 OSI参考模型与TCP/IP模型
10、第第5 5章章 C#C#网络编程方法概述网络编程方法概述 9 95.1 TCP/IP5.1 TCP/IP概述概述 从名字上看,TCP/IP包括两个协议,即传输控制协议(Transfer Control Protocol,TCP)和网际协议(Internet Protocol,IP),但实际上TCP/IP是一系列协议的代名词,它包括上百个各种功能的协议,如:地址解析协议(ARP)、Internet控制消息协议(ICMP)、文件传输协议等,而TCP协议和IP协议只是保证数据完整传输的两个重要协议。通常讲TCP/IP,但实际上指的是因特网协议系列,而不仅仅是TCP和IP两个协议,所以也常称为TCP/
11、IP协议族。该协议族分为四个层次:链路层、网络层、传输层和应用层。其各层所包含的主要协议如图5.3所示,具体各层所负责的功能如下。5.1.1 OSI参考模型与TCP/IP模型 图5.2 OSI参考模型与TCP/IP模型对比 图5.3 TCP/IP协议族第第5 5章章 C#C#网络编程方法概述网络编程方法概述 10105.1 TCP/IP5.1 TCP/IP概述概述 (1)链路层 链路层是TCP/IP协议族的最低层,有时也被称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆(或其他任何传输媒体)的物理接口。该层负责接收IP数据报并通过网络发
12、送到网络传输媒体上,或者从网络上接收物理帧,抽出IP数据报交给IP层。实际上,TCP/IP模型并没有真正描述这一层的实现,只是要求能够提供给其上层(网络层)一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法也随着网络类型的不同而不同。(2)网络层 网络层是整个TCP/IP协议栈的核心,有时也被称为互联网层或IP层。该层的主要功能是把分组发往目标网络或主机。同时,为了尽快发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层对分组进行排序。网络层除了完成上述功能外,还完成将不同类型的网络(异构网)进行互连的功能。除此之
13、外,网络层还需要完成拥塞控制的功能。 在TCP/IP协议族中,网络层协议包括IP协议(网际协议)、ICMP协议(因特网控制报文协议)和IGMP协议(因特网组管理协议)。5.1.1 OSI参考模型与TCP/IP模型 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 11115.1 TCP/IP5.1 TCP/IP概述概述 (3)传输层 传输层主要为两台主机上的应用程序提供端到端的数据通信,它分为两个协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供有质量保证的端到端的数据传输。若传输层使用TCP协议,则该层负责数据的分组、质量控制和超时重发等,对于应用层来说,就可以忽略这
14、些工作。UDP则只负责简单地把数据报从一端发送到另一端。若传输层使用UDP协议,则数据是否到达、是否按时到达、是否损坏都必须由应用层来控制。这两种协议各有用途,前者可用于面向连接的应用,后者则在及时性服务中有着重要的用途,如网络多媒体通信等。(4)应用层 应用层负责处理实际的应用程序细节,主要包括超文本传输协议(HTTP)、简单网络管理协议(SNMP)、文件传输协议(FTP)、简单邮件传输协议(SMTP)、域名系统(DNS)、远程登录协议(Telnet)等。其中,有些应用层协议是基于TCP来实现的,例如FTP、HTTP等,有些则是基于UDP来实现的,如SNMP等。5.1.1 OSI参考模型与T
15、CP/IP模型 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 12125.1 TCP/IP5.1 TCP/IP概述概述 3TCP/IP工作原理 由上述OSI参考模型可知,在因特网上源主机的协议层与目的主机的同层通过下层提供的服务实现对话。TCP/IP协议族模型也是按照这一原则来工作的。它们之间的对话实际上是在源主机上从上到下传递然后穿越网络到达目的主机后再从下到上到达相应层。 下面以图5.4中的客户机A(信源)和服务器B(信宿)之间采用应用层协议HTTP协议提交数据请求为例,说明TCP/IP的工作原理。5.1.1 OSI参考模型与TCP/IP模型 第第5 5章章 C#C#网络编程方
16、法概述网络编程方法概述 13135.1 TCP/IP5.1 TCP/IP概述概述 图5.4中的逻辑传输线路表明了数据传输的方向,以及信源和信宿,实际传输线路则表明了请求数据的真实传输链路。请求数据从信源传输到目的信宿的过程可描述如下:(1)在信源上,利用应用层协议(HTTP)将需传输的请求数据流传送给信源上的传输层(TCP)。(2)信源上的传输层将应用层的请求数据流截成若干分组,并加上TCP首部形成TCP段,送交信源上的网络层(IP)。(3)信源的网络层给TCP段加上包括源、目的主机IP地址的IP首部,生成一个IP数据报,并将IP数据报送交信源的链路层。(4)信源的链路层在其MAC帧的数据部分
17、装上IP数据报,再加上源、目的主机的MAC地址和MAC帧头,并根据其目的MAC地址,将MAC帧发往信宿或中间路由器,例如路由器R。(5)路由器是一个具有多个接口的网络互连设备,可以把数据从一个网络转发到另一个网络。当数据传输到路由器后,路由器将根据数据包中的目的地址进行传输路径的选择,并根据所选择的传输路径进行数据传输。通常,路由器只处理链路层和网络层的数据。在本实例中,路由器接收客户机A发送过来的IP数据报,并将该数据报转发给服务器B。5.1.1 OSI参考模型与TCP/IP模型 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 14145.1 TCP/IP5.1 TCP/IP概述概
18、述 (6)当数据传输到信宿,链路层将MAC帧的帧头去掉,并将IP数据报送交信宿的网络层。(7)信宿的网络层检查IP数据报首部,假如首部中校验和与计算结果不一致,则丢弃该IP数据报;若校验和与计算结果一致,则去掉IP首部,将TCP段送交信宿的传输层。(8)信宿的传输层检查顺序号,判定是否是正确的TCP分组,然后检查TCP首部数据。若正确,则向信源发确认信息;若不正确或丢包,则向信源要求重发信息。(9)信宿的传输层去掉TCP首部,将排好顺序的分组组成应用数据流送给信宿上相应的应用程序。这样信宿接收到的来自信源的字节流,就像是直接接收到来自信源的字节流一样。 5.1.1 OSI参考模型与TCP/IP
19、模型 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 15155.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念1IP地址 IP 地址是进行TCP/IP协议通信的基础,IP地址是对连接在因特网中的设备进行唯一性标识的设备编码,与日常生活中寄信时所用的信箱号类似,以便设备之间能根据IP地址来识别。在因特网中,根据TCP/IP协议规定,在IPv4中,IP地址由32位二进制数组成,其地址空间是0232-1。为了便于记忆,将这32位二进制数分成四段,每段8位,中间用小数点隔开,将每八位二进制数转换成一位十进制数,这样就形成了点分十进制的表示方法。例如:192.
20、168.0.181。一个简单的IP地址的格式为:IP地址 = 网络地址 + 主机地址,包含了网络地址和主机地址两部分重要的信息。由于IPv4定义的有限地址空间将被耗尽,地址空间的不足必将影响因特网的进一步发展。所以在最新出台的IPv6中IP地址升至128位。 IP地址共分五类:A类、B类、C类、D类和E类。其中A类、B类和C类为基本类;D类用于多播传送;E类属于保留类,暂未使用。它们的格式如下所示,其中“*”代表网络号位数。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 16165.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念 A类地址的最高位必须是
21、“0”,其第一个字节为网络地址,后三个字节为主机地址。因此A类地址可拥有126个网络地址数,其中每个网络最多可以包含的主机数目为224-2(主机地址全1和全0都属于特殊地址),即有16777214台主机。因此,A类地址适用于超大规模的网络。 B类地址的最高两位必须是“10”,前两个字节为网络地址,后两个字节为主机地址。B类IP地址中网络地址长度为14位,有16384个网络,其中每个网络最多可以包含的主机数目为2162,即有65534台主机。因此,B类地址适用于中等规模的网络。 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 17175.1 TCP/IP5.1 TCP/IP概述概述 5
22、.1.2 TCP/IP基本概念 C类地址的最高三位必须是“110”,前三个字节为网络地址,最后一个字节为主机地址。因此,C类地址的网络数目为221,即有2907152个网络,其中每个网络可以包含的主机数目为282,即有254台主机。因此,C类地址适用于小规模的局域网络。 D类地址与前三类地址不同,它是一种特殊的IP地址类,应用于多播通信,因此也被称为多播地址。地址前面有4个引导位“1110”,其余的28位表示多播地址,因此其地址范围为:55。D类地址只能作为目的地址,不能作为源地址。 E类地址是一般不用的实验性地址,前面包含4个引导位“1111”,因
23、此其地址范围为:55。 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 18185.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念 除上述几类地址外,还有几个特殊的地址。 网络地址:IP地址中主机地址为0的地址表示网络地址。这类地址不指派给任何主机,它只保留用来定义某个网络的地址。例如,某主机的IP地址为8,它是一个B类地址,则该主机所在网络的地址为。广播地址:在A、B、C三类地址中,主机号全为“1”的地址为广播地址。这类地址用来同时向指定网络的所有主机发送信息。例如
24、,如果某台主机使用55为目标地址发送数据报时,则网络地址为的网络中的所有主机都能收到该数据报。 回送地址:在IP地址中,首字节数值为“127”的地址是一个保留地址,称为回送地址。如:即为一个回送地址。该类地址用于网络测试或本机进程间通信。发送到这种地址的数据报不输出到线路上,而是立即被返回,又当作输入数据报在本机内部进行处理。例如,常用的“ping”命令,就是发送一个将回送地址作为目的地址的数据报,以测试IP软件能否接受和处理数据报。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 19195.1 TCP/IP5.1 TCP
25、/IP概述概述 5.1.2 TCP/IP基本概念2子网与掩码 如上所述,IP地址最初采用的是网络地址和主机地址两级结构,然而在实际组网过程中,常常会出现使用C类地址时,主机编址空间不够,而使用A类或B类地址时,又会造成大量IP地址浪费的现象。为此,IP地址现在多采用三级结构,即IP地址=网络地址+子网地址+主机地址。把每个网络的主机地址空间根据需要再进一步划分成若干个子网,则原来两级地址结构中的主机地址又细分为子网地址和主机地址,子网地址位数根据子网的实际规模来确定。具体三级结构地址的确定需要借助子网掩码来实现。 子网掩码是一个32位地址掩码,对应于网络地址和子网地址的地址掩码位设置为“1”,
26、而对应于主机地址的地址掩码位设置为“0”。子网掩码用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。 确定子网掩码的过程也就是划分子网的过程,通常划分步骤如下:(1)确定网络地址,划出网络标识和主机标识。例如:申请到的网络号为“202.195.a.b”,该网络地址为C类IP地址,网络标识为“202.195”,主机标识为“a.b”。 (2)根据需求确认子网个数。 在确认子网个数时应当考虑将来的扩展情况。例如:现在需要12个子网,将来可能需要16个子网,则至少需要用第三个字节的前四位来确定子网掩码,而后四位仍然用于主机地址。所以将前四位都置为“1”,后
27、四位全置为“0”,即第三个字节为“11110000”。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 20205.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念(3)得出子网掩码。 对应于网络地址和子网地址的地址掩码位设置为“1”,而对应于主机地址的地址掩码位设置为“0”。则子网掩码的二进制形式为:“11111111.11111111.11110000.00000000”,即为 “”。3端口号 按照TCP/IP模型的描述,应用层所有的应用进程(应用程序)都可以通过传输层再传送到IP层,传输层从IP层收到数据后必须交付给指明的应
28、用进程,因此必须给应用层的每一个应用程序赋予一个非常明确的标志。由于在因特网上使用的计算机的操作系统种类很多,不同的系统会使用不同的进程标识符,因此无法采用计算机中的进程标识符来作为标志,必须采用统一的方法对TCP/IP体录的应用进程进行标志。为了标识通信实体中进行通信的进程,TCP/IP协议提出了协议端口(protocol port,简称端口)的概念。 端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序通过系统调用与某端口绑定(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据也通过该端口输出。类似于文件描述符,每个端口都拥有一个叫端口
29、号的整数描述符,用来区别不同的端口。TCP/IP协议使用一个16位的整数来标识一个端口,它的范围是065535。由于TCP协议和UDP协议是两个完全独立的软件模块,因此各自的端口号也相互独立。如TCP有一个255号端口,UDP也可以有一个255号端口,两者并不冲突。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 21215.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念 端口号的分配通常有以下两种方法:(1)全局分配 这是一种集中分配方式,由一个公认权威的机构根据用户需要进行统一分配,并将结果公布于众。(2)本地分配 本地分配又称动态连接,即进程需要访
30、问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和端口连接起来。 TCP/IP端口号的分配综合了以上两种方式,将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。每一个标准服务器都拥有一个全局公认的端口,即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP规定,小于256的端口才能作为保留端口。具体讲,TCP/IP端口号分为如下两类。(1)服务器端使用的端口号。 服务器端的端口号又分为两类,最重要的一类叫公认端口号(well-known port number)或系统端口号,从01023,它
31、们紧密绑定于一些服务。通常这些端口的通信明确表明了某种服务的协议。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69,HTTP通信的端口号实际上总是80端口等。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 22225.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念 另一类叫注册端口号(Registered Ports),从102449151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其他
32、目的。例如,许多系统处理动态端口从1024左右开始。使用这类端口号必须在IANA按照规定的手续登记,以防重复。(2)客户端使用的端口号。 这类端口通常又称为动态和/或私有端口(Dynamic and/or Private Ports),从4915265535。理论上,不应为服务分配这些端口。这类端口号是留给客户进程选择暂时使用的。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,刚才已经使用过的客户端口号就不复存在。这个端口号就可以供其他客户进程以后使用。实际上,机器通常从1024开始分配动态端口。4地址解析 地址解析(Address
33、Resolution)就是将计算机中的协议地址翻译成物理地址(或称MAC地址,即媒体映射地址)。地址解析技术可分为如下3种。(1)表查询(Table-Lookup)。该方法适用于广域网,通过建立映射数组(协议地址物理地址)的方法解决。当需要进行地址解析时,由软件通过查询找到物理地址。 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 23235.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念(2)相近形式计算(Closed-Form Computation)。该方法适用于可以自行配置的网络,IP地址和物理地址相互对应。通常分配给计算机的协议地址是根据其物
34、理地址经过仔细挑选的,使得计算机的物理地址可以由它的协议地址经过基本的逻辑和算术运算计算出来。例如:XXXlXXX2可通过这种算法得到物理地址:物理地址 协议地址 & 0 xFF。(3)信息交换(Message Exchange)。该方式适用于LAN,是基于分布式的处理方式,即主机发送一个解析请求,以广播的形式发出,并等待网络内各个主机的响应。 TCP/IP协议包含了地址解析协议(Address Resolution Protocol,ARP)。ARP标准定义了两种基本信息类型:请求与响应。当一台主机要求转换一个IP地址时,它广播一个含有
35、该IP地址的ARP请求,如果该请求与一台机器的IP地址匹配,则该机器发出一个含有所需物理地址的响应。响应是直接发给广播该请求的机器的。 在使用ARP的计算机上都保留了一个高速缓存,用于存放最近获得的IP地址到物理地址的绑定,在发送分组时,计算机先到缓存中寻找所需的绑定,如没有,则发出一个ARP请求。接收方在处理ARP分组之前,先更新它们缓存中发送方的IP地址到物理地址的绑定信息,再进行响应或抛弃。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 24245.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念5域名系统 在Internet上,既可以使用主机名标
36、识一台主机,也可以使用IP地址来标识。但是在TCP/IP中,点分十进制的IP地址记起来总是不如名字那么方便,人们更愿意使用便于记忆的主机名标识符,所以,就采用了域名系统(Domain Name System,DNS)来管理名字和IP地址的对应关系。一个系统的全域名由主机名、域名和扩展名三部分组成,各部分间使用“”分隔,例如。在TCP/IP应用中,域名系统是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息,可以通过在程序中调用标准库函数来编程实现域名与IP地址之间的相互转换,这一转换过程称为“域名解析”。通过从域名地址到IP地址的映射,使得在日常的网络应用中,可以使用域名这种便于记忆的
37、地址表示形式。所有的网络应用程序理论上都应该具有内嵌的域名解析机制。 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 25255.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念 域名解析的流程由以下几步构成:(1)客户机提出域名解析请求,并将该请求发送给本地的域名服务器。(2)当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该记录项,则本地的域名服务器就直接把查询的结果返回。(3)如果本地的缓存中没有该记录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。(4)本
38、地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该记录,则返回相关的下级域名服务器的地址。(5)重复第四步,直到找到正确的记录。(6)本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 26265.1 TCP/IP5.1 TCP/IP概述概述 5.1.2 TCP/IP基本概念 当主机通过网络向其他设备传输数据时,首先要对数据进行打包,这一打包的过程就称为数据封装。在TCP/IP模型中,为了实现通信并交换信息,每一层都有各自的协议数据单元(Protocol Data U
39、nits,PDU),通过封装使每个PDU附加到数据上。每个PDU都有其特定的名称,如:链路层数据帧,网络层数据包,传输层数据段。这种PDU信息只能由接收方设备中的对等层读取,在读取之后,报头就被剥离,然后把数据交给上一层。数据的封装过程如图5.5所示。解封装则是数据封装的逆过程,当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称为解封装。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 27275.2 .NET5.2 .NET网络编程基础网络编程基础 5.2.1
40、.NET中的网络组件 C#和C+的差异之一,就是它本身没有类库,C#所使用的类库是.Net框架中的类库.Net Framework SDK。因此了解并掌握.Net框架为网络编程提供的类库是学习C#网络编程的前提。.Net框架为网络开发提供了两个顶层命名空间:System.Net和System.Web,同时它们又包含多个子命名空间,C#就是通过这些命名空间中封装的类和方法实现网络通信编程、Web应用编程以及Web Service编程的。具体命名空间及其所含类的功能概述如表5.1 所示。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 28285.2 .NET5.2 .NET网络编程基础网
41、络编程基础 命 名 空 间功 能 概 述System.Net为当前网络上流行的多种协议提供一个统一、简单的编程接口。其中WebRequest和WebResponse类形成了“可插入协议”的基础,利用这种网络服务的实现,可以开发在使用Internet资源时不必考虑所用协议具体细节的应用程序System.Net.Cache定义类型和枚举,这些类型和枚举用于为使用WebRequest和HttpWebRequest类获取的资源定义缓存策略System.Net.Configuration所含类提供以编程方式访问和更新System.Net命名空间的配置设置的功能System.Net.Mail用于将电子邮件
42、发送到简单邮件传输协议(SMTP)服务器进行传送的类System.Net.Mime包含用于表示多用途Internet邮件交换(MIME)标头的类型。这些类型与System.Net.Mail命名空间中的类型一起使用,用于在使用SmtpClient类发送电子邮件时指定Content-Type、Content-Disposition和Content-transfer-Encoding标头System.Net.NetworkInformation提供对网络流量数据、网络地址信息和本地计算机的地址更改通知的访问。该命名空间还包含实现Ping实用工具的类。您可以使用Ping和相关的类检查是否可通过网络访问
43、某台计算机System.Net.Security为网络流在主机间的传输提供了安全控制System.Net.Sockets为需要严格控制网络访问的开发人员提供Windows套接字(Winsock)接口的托管实现System.Web包含启用浏览器/服务器通信的类和接口。这些命名空间类用于管理到客户端的HTTP输出(HttpResponse)和读取HTTP请求(HttpRequest)。附加的类则提供了一些功能,用于服务器端的实用程序以及进程、cookie管理、文件传输、异常信息和输出缓存控制System.Web.UI包含创建Web窗体页的类,包括Page类和用于创建Web用户界面的其他标准类Sys
44、tem.Web.UI.HtmlControls包含创建ASP.NET Web服务器控件的类。当添加到Web窗体时,这些控件将呈现浏览器特定的HTML和脚本,用以创建与设备无关的Web用户界面System.Web.Mobile包含生成ASP.NET移动Web应用程序所需的核心功能,包括身份验证和错误处理System.Web.UI.MobileControls包含一组ASP.NET服务器控件,这些控件可以针对不同的移动设备呈现应用程序System.Web.Services包含使您能够生成和使用XML Web services的类,这些服务是驻留在Web服务器中的可编程实体,并通过标准Interne
45、t协议公开 5.2.1 .NET中的网络组件 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 29295.2 .NET5.2 .NET网络编程基础网络编程基础 类 名功 能 概 述DNS提供简单域名解析功能DnsPermission控制对网络DNS服务器的访问EndPoint用于标识网络地址FileWebRequest为WebRequest类提供了一个文件系统实现FileWebResponse为WebResponse类提供了一个文件系统实现HttpVersion定义了由HttpWebRequest和HttpWebResponse类支持的HTTP版本号HttpWebRequest为We
46、bRequest类提供了特定于HTTP的实现HttpWebReponse为WebResponse类提供了特定于HTTP的实现IPAddress提供了IP地址IPEndPoint以IP地址和端口号的形式代表一个网络终端IPHostEntry为Internet主机地址信息提供了容器类ProtocolViolationException当使用网络协议时出现错误,则将抛出由该类所代表的异常SocketAddress代表一个套接字地址SocketPermission控制在传输地址上生成或接收连接的权限SocketPermissionAttribute允许将SocketPermission的安全动作,施用
47、于使用声明安全性的代码WebClient为客户与Internet资源间的数据发送和接收提供了通用方法WebException当通过可插入协议访问网络时出现错误,则将抛出由该类代表的异常WebProxy包含WebRequest类的HTTP代理WebRequest代表一个到URI的请求WebResponse代表来自URI的响应 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 30305.2 .NET5.2 .NET网络编程基础网络编程基础 类 名功 能 概 述LingerOption包含套接字延迟时间的信息,即当数据仍在发送时,套接字应在关闭后保持的时间MulticastOption包含
48、了IP多点传送数据包的选项值NetworkStream为网络访问提供了基础数据流Socket实现了Berkeley套接字接口SocketException当出现套接字错误时,将抛出由该类所代表的异常TCPClient为TCP网络服务提供了客户连接TCPListener用以监听TCP客户连接UDPClient用于提供UDP网络服务 5.2.1 .NET中的网络组件 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 31315.2 .NET5.2 .NET网络编程基础网络编程基础 类 名功 能 概 述HttpApplication定义了ASP.NET应用程序中所有应用程序对象的通用方法、属
49、性和事件HttpApplicationState允许ASP.NET应用程序中的多个会话和请求共享全局信息HttpBrowserCapabilities允许服务器收集客户端浏览器的性能信息HttpContext封装了所有关于HTTP请求的特定信息HttpException提供了生成HTTP异常的手段HttpFileCollection为由用户上传的文件提供访问和组织手段HttpParseException为生成HTTP解析异常提供了手段HttpPostedFile提供了访问由客户上传的文件的方式HttpRequest允许ASP.NET读取在Web请求中由客户发送的HTTP值HttpRespons
50、e封装了来自一个ASP.NET操作的HTTP响应信息HttpUtility为处理Web请求时的URL编码和解码提供了方法ProcessInfo提供了当前运行的进程信息 5.2.1 .NET中的网络组件 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 32325.2 .NET5.2 .NET网络编程基础网络编程基础 属性、方法名说 明Any只读属性,提供一个IP地址,标识服务器应该监听所有网络接口上的客户活动Broadcast只读属性,提供IP广播地址,等价于55Loopback只读属性,提供IP回送地址,等价于None只读属性,提供一个IP
51、地址,标识不应使用网络接口Address获取或设置一个IP地址AddressFamily指定IP地址的地址族Equals( )比较两个IP地址GetHashCode( )获取IP地址哈希值HostToNetworkOrder( )将主机字节顺序值转换为网络字节顺序值Parse( )将IP地址字符串转换为IP地址实例 5.2.2 网络编程中的常用类 1IP地址类 与IP地址相关的类有IPAddress类、IPHostEntry类、IPEndPoint类等。IPAddress类是一个描述IP地址的类,主要用来存储IP地址。IPAddress类的属性和方法如下表所示。第第5 5章章 C#C#网络编程
52、方法概述网络编程方法概述 33335.2 .NET5.2 .NET网络编程基础网络编程基础 属性、方法名说 明Address获取或设置EndPoint的IP地址AddressFamily获取IP地址族Port获取或设置EndPoint的TCP端口号MaxPort用于指定可被赋予Port属性的最大值(只读)MinPort用于指定可被赋予Port属性的最小值(只读)Create( )调用Creat( )方法,以根据套接字地址创建EndPointSerialize( )调用Serialize( )方法,以将EndPoint信息序列化到一个SocketAddress实例中 5.2.2 网络编程中的常用
53、类 IPHostEntry类是为Internet主机地址信息提供容器的类,它将DNS主机名与一个别名数组和匹配的IP地址数组相关。通常IPHostEntry类作为Dns类的辅助类使用。该类有如下几个属性。Aliases属性:获取或设置与主机相关的别名清单。AddressList属性:获取或设置与主机相关的IP地址。其值为IPAddress类型的数组,其中包含的IP地址用于解析Aliases属性中的主机名。HostName属性:获取或设置主机的DNS名。包含服务器的基础主机名,如果服务器的DNS项定义了附加别名,则可通过Aliases属性使用它们。IPEndPoint类以IP地址和端口号的形式代
54、表一个网络终端。该类中包含应用程序连接到主机服务时需要的主机和端口信息,通过组合主机的IP地址和端口号构成服务的一个连接点。IPEndPoint类的属性和方法如下表所示。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 3434举例举例/Creates an IpEndPoint. IPAddress ipAddress = Dns.Resolve().AddressList0; IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 11000); /Serializes the IPEndPoint. SocketAddress
55、 socketAddress = ipLocalEndPoint.Serialize(); /Verifies that ipLocalEndPoint is now serialized by printing its contents. Console.WriteLine(Contents of the socketAddress are: + socketAddress.ToString(); /Checks the Family property. Console.WriteLine(The address family of the socketAddress is: + socke
56、tAddress.Family.ToString(); /Checks the underlying buffer size. Console.WriteLine(The size of the underlying buffer is: + socketAddress.Size.ToString(); /Deserialize.IPEndPoint clonedIPEndPoint = (IPEndPoint)endpoint.Create(socketAddress); 第第5 5章章 C#C#网络编程方法概述网络编程方法概述 35355.2 .NET5.2 .NET网络编程基础网络编程基
57、础 属性、方法名说 明BeginGetHostByName( )开始由主机名获得IPHostEntry信息,异步操作BeginGetHostEntry( )开始由IP地址或主机名获得IPHostEntry信息,异步操作BeginResolve( )开始请求域名解析,由WWW名获得IPHostEntry信息,异步操作EndGetHostByName( )终止对DNS信息的异步请求(与BeginGetHostByName( )对应)EndGetHostEntry( )终止对DNS信息的异步请求(与BeginGetHostEntry( )对应)EndResolve( )终止对DNS信息解析的异步请求
58、GetHostByAddress( )根据指定IP地址创建一个IPHostEntry实例GetHostByName( )根据主机名获取一个IPHostEntry实例GetHostEntry( )根据IP地址或主机名获取一个IPHostEntry实例GetHostName( )获取本地计算机的主机名Resolve( )将DNS主机名或IP字符串转换为IPHostEntry实例 5.2.2 网络编程中的常用类 2域名解析类 Dns类是一个静态类,它提供了有关域名解析的操作。它将从网络主机域名系统中获取IP地址和主机名、WWW域名的对应关系。它返回一个IPHostEntry对象以保存结果。如果返回值
59、是多个信息,IPHostEntry将返回主机的多个地址和别名。Dns类的方法如下表所示。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 36365.2 .NET5.2 .NET网络编程基础网络编程基础 属性、方法名说 明Copy( )创建当前实例的拷贝FromXml( )根据XML编码重构DnsPermission实例Intersect( )创建当前DnsPermission实例与指定DnsPermission实例的交集IsSubsetOf( )确定当前DnsPermission实例是否为指定DnsPermission实例的子集IsUnrestricted( )检查对象的许可状态To
60、Xml( )使用当前的DnsPermission实例及其状态创建XML编码Union( )创建当前DnsPermission实例与指定DnsPermission实例的并集 5.2.2 网络编程中的常用类 DnsPermission类控制对网络DNS服务器的访问。默认情况下,所有本地和Internet域中的应用程序都能访问DNS服务,并且对Internet应用程序无DNS许可。DnsPermission类的方法如下表所示。第第5 5章章 C#C#网络编程方法概述网络编程方法概述 3737举例举例public static ManualResetEvent GetHostEntryFinished = n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论