第一章:网络应用编程入门知识


一、网络应用编程模型

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);
//第一个参数指定IP地址,第二个参数指定端口号。

3、IPHostEntry类:将一个域名系统(DNS)的主机名与一组别名和一组匹配的IP地址关联。该类一般和Dns类一起使用。
常用属性:
【1】AddressList属性
获取或设置与主机关联的IP地址列表(包括IPv4和IPv6)。
【2】HostName属性
包含了指定主机的主机名。
 Dns类的静态方法GetHostEntry()能够获得IPHostEntry对象。

IPAddress[] ips =Dns.GetHostEntry(“news.sohu.com”).AddressList;
//获取搜狐的所有IP地址。

补充:
【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(""); //获取本机的所有IP地址

(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类提供的常用方法
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jinyeran/article/details/118574167