一、网络应用编程模型
1、网络应用编程模型 1)早期计算机网络的数据通信模型 ①分散式(Decentralized)
- 可靠性高
- 重复存储、不一致性高、成本增加
- 早被淘汰
②集中式(Centralized) - 硬件成本低,数据共享,资源集中
- 响应慢,可靠性低
- 早被淘汰
③分布式(Distributed) - 分布式系统是分散式系统和集中式系统的混合体。
- 分布式系统与计算机网络的主要区别是软件而不是硬件。
- 分布式环境中资源以透明的方式供用户使用。
2)C/S模式 【1】C/S(Client/Server)也叫C/S模式、C/S架构或C/S模型,是胖客户端应用程序编程架构,其主要工作都在客户端运行。 【2】C/S将一个网络事务处理分为两部分: ①客户端(Client,也叫客户机)用于为用户提供操作,同时向网络提供请求服务的接口; ②服务端(Server)负责接收并处理客户端发出的服务请求,并将服务处理结果返回给客户端。运行服务端进程的计算机系统一般通过所提供的服务来命名。 【3】C/S既适用于实际的应用程序,又适用于真正的计算机部署。从程序实现的角度来说,客户端和服务端实际是计算机上的两个进程的交互。服务端进程逐一等待并处理客户端请求。 【4】C/S应用程序编程模型为:面向服务的体系架构(SOA),WCF是其中一种具体实现技术。 3)B/S模型: 【1】仅用HTTP(超文本传送协议)进行通信。也被成为web应用程序。 【2】采用三层构架,用户界面,逻辑处理和数据支持构成。
【3】优点是单台计算机可以访问任何Web服务器。 缺点是B/S模式有沙盒限制。
二、TCP/IP网络协议
三、传统的网络编程技术简介
传统网络应用编程技术中,需要添加命名空间为System.Net.Sockets的引用。
- 在套接字级别进行控制,直接用该命名空间下的Socket类。
- 提供的TcpClient类,TcpListener类和UdpClient类:封装了不同传输协议建立连接的实现细节,提供了多种传输数据的操作方法。
1.套接字编程(Socket类) 【1】套接字是支持TCP/IP网络通信的基本操作单元。一个套接字实例中保存有本机的IP地址和端口,对方的IP地址和端口,双方通信采用的网络协议等信息。 【2】套接字有3种不同的类型: 流式套接字:实现面向连接的TCP通信 数据报套接字:实现无连接的UDP通信 原始套接字:实现IP数据包通信 注:基于TCP和UDP的应用程序中,可以使用TcpListener类,TcpClient类,UdpClient类或者Socket类来实现。 2.TCP应用编程(TcpClient类,TcpListener类) 【1】IP连接领域有两种通信类型:面向连接的和无连接的。 【2】在面向连接的套接字中,使用TCP来建立两个IP地址端点之间的会话。一旦建立了这种连接,就可以在设备之间进行可靠的数据传输。 【3】TCP应用编程具体实现上:服务端使用TcpListener类,客户端使用TcpClient类;或者全部使用Socket实现。 3.UDP应用编程(UdpClient类) 【1】UDP使用无连接的套接字,无连接的套接字不需要在网络设备之间发送连接信息。因此,在程序中很难确定有哪些服务器和客户端。 【2】具体实现:UdpClient类是在UDP层面面对套接字编程的进一步封装。 4.其他传统的网络应用编程技术 HTTP应用编程 FTP应用编程 SMTP与POP3应用编程 P2P应用编程
练一练:TCP特点为 ( 可靠的,面向连接的 ) ,UDP特点(不可靠的,无连接的,速度快 )。
四、IP地址与端口
1、在网络上,识别远程主机的信息主要由两部分组成: ①主机标识:识别与本地计算机通信的是哪台远程主机; ②端口号:识别和远程主机的哪个进程通信。 2、IP地址:在因特网中,每台联网的主机都会在全世界范围内唯一的标识。 【1】一个IP地址主要由两部分组成: ①网络号:识别该地址所属的网络,它由Internet权利机构分配。 ②主机号:指明网络内的主机,它由各个网络的管理员统一分配。 【2】编址方案: (1)IPv4编址方案 由4个字节(十进制表示)组成的二进制值进行识别,中间用圆点分开,这种方法叫点分十进制表示法。 (2)IPv6编址方案 每个IP地址有16个字节(128位二进制数),其完整格式用8段16进制表示,各段之间用冒号分隔,多个连续的0可以用::表示。 【3】子网掩码:子网掩码用于屏蔽IP地址的一部分以区别网络标识和主机标识。可以利用子网掩码判断两台计算机是否在同一子网内。并说明IP地址是在局域网还是在远程网上。 具体操作:将其IP地址和子网掩码做按位与运算,如果得到结果相同即在同一个子网内。 3、端口:IP地址仅仅能够识别到某台主机,而不能识别该主机上的进程;端口(Port)识别是哪个进程。 【1】端口有两种意思:一种是物理意义上的端口,一种是逻辑意义上的端口,即进程标识,范围从0到65535。 【2】端口是为了解决与多个进程同时进行通信的问题。 【3】1000以内的端口号大多被标准协议所占用;应用程序中可以自由使用的端口号一般都使用大于1000的值。
五、IP地址转换相关类
1、IPAddress类:位于System.Net命名空间下,提供了对IP地址的转换和处理功能。 【1】用提供的静态Parse方法将IP地址字符串转换为IPAddress的实例。
Try
{
IPAddress ip = IPAddress.Parse("143.24.20.36");
}
Catch
{
MessageBox.Show("请输入正确的IP地址!");
}
? 如果IP地址字符串格式不正确,调用Parse方法时会出现异常。 【2】利用该实例的AddressFamily属性可判断该IP地址是IPv6还是IPv4。
IPAddress ip = IPAddress.Parse("::1");
if (ip.AddressFamily == AddressFamily.InterNetworkV6)
{
MessageBox.Show("这是IPv6地址");
}
【3】IPAddress类还提供了7个只读字段,分别代表程序中使用的特殊IP地址。
2、IPEndPoint类:描述应用程序连接到主机上的服务所需的主机和端口信息。
public IPEndPoint(IPAddress address, int port);
3、IPHostEntry类:将一个域名系统(DNS)的主机名与一组别名和一组匹配的IP地址关联。该类一般和Dns类一起使用。 常用属性: 【1】AddressList属性 获取或设置与主机关联的IP地址列表(包括IPv4和IPv6)。 【2】HostName属性 包含了指定主机的主机名。 ? Dns类的静态方法GetHostEntry()能够获得IPHostEntry对象。
IPAddress[] ips =Dns.GetHostEntry(“news.sohu.com”).AddressList;
补充: 【1】域名:用字符型的名字来标识IP地址,这个字符型地址称为域名地址,简称域名。 【2】将域名转换为对于IP地址的过程称为域名解析。 【3】DNS(域名系统)是Internet的一项核心服务,它可以将域名和IP地址相互转换。 【4】DNS静态方法: (1)GetHostAddresses方法:返回指定主机的Internet协议IP地址,与该方法对应的还有异步方法;可以获取指定主机的IP地址,该方法返回一个IPAddress类型的数组。
public static IPAddress[] GetHostAddresses(string hostNameOrAddress);
参数中的hostNameOrAddress表示要解析的主机名或IP地址。 若hostNameOrAddress是IP地址,则直接返回此地址; 若hostNameOrAddress是空字符串,则返回本机所有IPv4和IPv6地址。
IPAddress[] ips = Dns.GetHostAddresses("");
(2)GetHostEntry方法 将主机名或IP地址解析为IPHostEntry实例,与该方法对应的还有异步方法;可返回一个IPHostEntry实例,用于在DNS服务器中查询与某个主机名或IP地址关联的IP地址列表。
public static IPHostEntry GetHostEntry (string hostNameOrAddress)
参数中的hostNameOrAddress表示要解析的主机名或IP地址。 当参数为空字符串时,返回本地主机的IPHostEntry实例。 (3)GetHostName方法 获取本地计算机的主机名。
六、网卡信息检测与网络流量检测
1、网络适配器:又称网卡或网络接口卡(NIC),是连接计算机与网络的硬件设备。整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发送。 2、MAC地址就是指网卡的物理地址。 3、网卡信息检测相关类 【1】NetworkInterface类 NetworkInterface类①提供了网络适配器的配置和统计信息。可以利用这个类检测本机有多少个网络适配器、网络适配器型号以及网络适配器的速度等。②提供网络适配器的配置和统计信息。例如本机有多少个网卡、哪些网络连接可用、网卡型号、MAC地址和速度等。 ③NetworkInterface类常用的属性和方法: ④获取实例:利用NetworkInterface类提供的静态方法得到NetworkInterface类型的数组。
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
【2】IPInterfaceProperties类 ①检测本机所有网络适配器支持的各种地址(IPv4和IPv6的网络适配器地址信息),如Dns服务器的IP地址、网关地址以及多路广播地址。 ②IPInterfaceProperties类是抽象类,不能实例化。可以通过NetworkInterface对象的GetIPProperties()获得其实例。
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
IPInterfaceProperties adapterProperties = adapters[0].GetIPProperties();
③IPInterfaceProperties类常用的属性和方法 4、流量检测相关类: IPGlobalProperties类 ①提供了本地计算机网络连接和通信统计数据的信息。统计本机连接和发送数据的情况。 ②检测网络流量时,首先调用IPGlobalProperties类提供的静态方法GetIPGlobalProperties得到IPGlobalProperties的实例,然后通过该实例的相关属性即可得到需要的信息。
IPGlobalProperties properties = IPGlobalPropeties.GetIPGlobalProperties( );
③IPGlobalProperties类提供的常用方法
|