第02章 网络协议与套接字

上传人:马*** 文档编号:243745317 上传时间:2024-09-30 格式:PPT 页数:46 大小:286.50KB
返回 下载 相关 举报
第02章 网络协议与套接字_第1页
第1页 / 共46页
第02章 网络协议与套接字_第2页
第2页 / 共46页
第02章 网络协议与套接字_第3页
第3页 / 共46页
点击查看更多>>
资源描述
主标题,一级标题,二级标题,46,第,2,章 网络协议,与套接字,2.1,网络协议简介,2.2 IP,地址,转换,与域名,解析,2.3,套接字,2.4,网,卡信息检测,与网络流量检测,2.5,字符编码与解码,2.1,网络协议简介,协议协议能确保网络上的计算机能相互识别对方的信息。计算机的通信协议精确地定义了计算机在彼此通信过程的所有细节。例如,每台计算机发送的信息格式和含义,在什么情况下应发送规定的特殊信息,以及接收方的计算机应做出哪些应答等等。,TCP/IP,是,一组,协议的总称(,Transmission Control Protocol/Internet Protocol,),网际协议(,IP,)对底层硬件设备进行封装,使之能适应各种网络硬件,确保任何一个网络只要可以从一个地点向另一个地点传送二进制数据,就可以使用,IP,协议加入,Internet,。,2.1,网络协议简介,(续),传输控制协议(,TCP,),IP,只是保证计算机之间可以发送和接收资料,但,IP,协议不能解决资料分组在传输过程中可能出现的问题。因此,计算机还需要安装,TCP,协议来提供可靠的并且无差错的通信服务。,TCP,被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,,TCP,会让它们建立一个连接、发送和接收资料以及终止连接。,TCP,能够自动适应网上的各种变化。即使在,Internet,暂时出现堵塞的情况下,,TCP,也能够保证通信的可靠。,TCP,协议具有自动调整,超时值,的功能,能很好地适应,Internet,上各种变化,确保传输数值的正确。,2.1,网络协议简介,(续),TCP/IP,模型该模型将,Internet,分为五个层次,,,从高到低依次,为:,应用层、传输层、互联网层、网络接口层、物理层,2.1,网络协议简介,(续),(,1,)应用层(第,5,层)定义了应用程序使用互联网的规范。如简单邮件传输(,SMTP,)文件传输协议(,FTP,)网络远程访问协议(,Telnet,)等。,(,2,)传输层(第,4,层) 提供节点间的数据传送服务,为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。包括:传输控制协议(,TCP,)用户数据报协议(,UDP,),2.1,网络协议简介,(续),(,3,)互连网层,(第,3,层),定义了互联网中传输的“信息包”格式,以及从一个用户通过一个或多个路由器到最终目标的,信息包,转发机制。,(,4,)网络接口层,(第,2,层),定义如何使用网络来传送数据。,(,5,)物理层,(第,1,层),对应于网络的基本硬件,即我们可以看得见的硬设备,如,PC,机、互连网服务器、网络设备等。该层对硬设备的电气特性作一个规范,使各设备能互相连接并兼容使用。,2.1,网络协议简介(续),IP,地址:是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围内惟一的标识符。一个,IP,地址主要由两部分组成:网络地址和主机地址。,网络地址由因特网权力机构分配,主机地址由各个网络的管理员统一分配。,IP,地址编制方案有两种:,IPV4,和,IPV6IPV4,:二进制表示共,32,位(,4,个字节),IPV6,:二进制表示共,128,位(,16,个字节),在,IPV4,编制方案中,一般使用点分十进制表示法表示,IP,地址。例如:,192.168.3.1,2.1,网络协议简介(续),端口:,IP,地址仅仅能够具体标识到某台主机,而端口则表示与计算机上的哪个进程通信。,根据,IP,地址找到是与哪台机器通信,根据端口号找到是与该机器的哪个进程通信。,(,一个进程可能会使用多个端口,),端口地址的范围是十进制的,0,65535,2.2 IP,地址,转换,与域名解析,2.2.1,IPAddress,类,提供了对,IP,地址的转换、处理,2.2.2,IPEndPoint,类,IP,地址和端口的组合,2.2.3,IPHostEntry,类,将域名系统与一组匹配的,IP,地址关联在一起。,2.2.4,Dns,类,提供域名,解析及其与,IP,地址之间的相互转换功能,2.2.1,IPAddress,类,IPAddress,类,(,System.Net,命名空间下,),:一般使用,IPAddress,的,Parse,方法将,IP,地址字符串转换为,IPAddress,的,实例。例如:,IPAddress,ip,= IPAddress.Parse(“192.168.1.1”);,属性,Any,提供一个,IPv4,地址,指示服务器应侦听所有网络接口上的客户端活动。(等效于,0.0.0.0,),Broadcast,提供,IPv4,广播地址(等效于,255.255.255.255,),Loopback,表示,IPv4,回送地址(等效于,127.0.0.1,),None,表示,Socket,不应侦听客户端活动(不使用任何网络接口)。,IPv6Any,提供可用的,IPv6,地址,IPv6Loopback,表示,IPv6,回送地址,IPv6None,提供不使用任何网络接口。,2.2.2,IPEndPoint,类,IPEndPoint,类包含了连接到主机上的服务所需的,IP,地址和端口信息。,IPEndPoint,类常用的构造函数为:,public,IPEndPoint(IPAddress,int,);,其中第一个参数指定,IP,地址,第二个参数指定端口号。,2.2.3,IPHostEntry,类,IPHostEntry,类的实例对象中包含了与主机相关的信息。常用属性有:(,1,),AddressList,属性,:,获取或设置与主机关联的,IP,地址列表,是一个,IPAddress,类型的数组,包含了指定主机的所有,IP,地址;,(,2,),HostName,属性:包含了服务器的主机名。,在,Dns,类中,有一个专门获取,IPHostEntry,对象的方法。,例如:,IPAddress,ips,=,Dns.GetHostEntry(“).AddressList,;,2.2.4,Dns,类,DNS,(,Domain Name System,,域名系统)提供了一系列静态的方法,用于获取提供本地或远程域名等功能,常用方法有:,(,1,),GetHostAddresses,方法,获取指定主机的,IP,地址,返回一个,IPAddress,类型的数组。格式为:,public static,IPAddress,GetHostAddresses(string,hostNameOrAddress,);,例如:,IPAddress,ips,=,Dns.GetHostAddresses(,);,注意:如果,hostNameOrAddress,是,IP,地址,则不查询,DNS,服务器,直接返回此地址。,2.2.4,Dns,类(续),(,2,),GetHostEntry,方法,在,DNS,服务器中查询与某个主机名或,IP,地址关联的,IP,地址。,当参数为空字符串时,此方法返回本地主机的,IPv4,地址和主机名。,例如:,IPHostEntry,host =,Dns.GetHostEntry,();,listBox1.Items.AddRange(host.AddressList); /,本机所有,IPv4,地址,listBox1.Items.Add(host.HostName); /,本机主机名,(,3,),GetHostName,方法,获取本机主机名。,例如:,string hostname =,Dns.GetHostName,();,2.2.4,Dns,类(续),【,例,2-1,】,IPAddress,类、,Dns,类、,IPHostEntry,类和,IPEndPoint,类的使用方法。,2.3,套接字,套接字是支持,TCP/IP,协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字通常和同一个域中的套接字交换数据,各种进程使用这个相同的域互相之间用,Internet,协议进行通信。,用,C#,编写符合标准的网络应用程序时,应该尽可能使用,TcpListener,类、,TcpClient,类、,UDPClient,类或其它对应类。而不是直接用,Socket,类。,用,C#,编写非标准的网络应用程序时,只能使用,Socket,类。,2.3.1,同步套接字与异步套接字,套接字的类型有:,流式套接字:提供了面向连接的、可靠的、数据无错并且无重复的数据发送服务,而且接收数据的顺序和发送数据的顺序是相同的。,数据报套接字:提供了面向无连接的服务,它以独立的数据包形式发送数据,(,数据包长度不能大于,32KB),,不提供正确性检查,也不保证各数据包的发送顺序和接收顺序相同 ,因此,可能出现数据的重发、丢失等现象。,原始套接字:用于直接访问协议的较低层。常用于检验新的协议实现或访问现有服务中配置的新设备,一般不提倡直接使用原始套接字。,2.3.1,同步套接字与异步套接字(续),使用套接字处理数据有两种基本模式:,同步套接字:在通过,Socket,进行连接、接收、发送操作时,客户机或服务器在接受对方响应前会处于阻塞状态,即一直等到接受对方请求后才继续执行下面的语句。同步套接字适用于对数据处理用时不多的场合。,异步套接字:通过,Socket,进行连接、接收或发送操作时,客户端或服务器不会处于阻塞方式,而是利用,callback,机制进行连接、接收以及发送处理,这样就可以在调用发送或接收的方法后直接返回,并继续执行下面的语句。异步套接字适用于进行大量数据处理或者用时较多的场合。,2.3.2 Socket,类,Socket,类包含在,System.Net.Sockets,命名空间中。,一个,Socket,实例包含了一个本地或者一个远程端点的套接字信息。,使用,Socket,类编程,,由于很多细节都需要自己考虑,相对来说,复杂,一些,,易出错,。一般,对套接字编程比较熟悉的人,或者使用非标准协议(自定义的新协议)进行编程的时候,,才,使用,Socket,类。,Socket,类的构造函数为:,public Socket(,AddressFamily,addressFamily, /,网络类型,SocketType,socketType, /,套接字类型,ProtocolType,protocolType,); /,使用的协议,2.3.2 Socket,类(续),Socket,构造函数的三个参数中,对于网络上的,IP,通信来说,,AddressFamily,总是使用,AddressFamily.InterNetwork,枚举值。而,SocketType,参数则与,ProtocolType,参数配合使用,不允许其他的匹配形式,也不允许混淆匹配。下表列出了可用于,IP,通信的组合。,SocketType,ProtocolType,说明,Dgram,Udp,无连接通信,Stream,Tcp,面向连接的通信,Raw,Icmp,Internet,控制报文协议,Raw,Raw,简单,IP,包通信,2.3.3,面向连接的套接字编程,Socket(),Bind(),Listen(),Accept(),Receive(),Send(),Close(),Socket(),Connect(),Send(),Receive(),Close(),服务器端 客户端,面向连接的套接字编程,2.3.3,面向连接的套接字编程(续),服务器端部分代码举例:,IPHostEntry,local =,Dns.GetHostByName(Dns.GetHostName,();,IPEndPoint,iep,= new IPEndPoint(local.AddressList0,11,80);,Socket,localSocket,= new Socket(,AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp,);,localSocket.Bind(iep,);,locatSocket.Listen(10);,Socket,clientSocket,=,localSocket.Accept,();,2.3.3,面向连接的套接字编程(续),客户端部分代码举例:,IPAddress,remoteHost,= IPAddress.Parse(192.168.0.1);,PEndPoint,iep,= new,IPEndPoint(remoteHost,11,80);,Socket,localSocket,= new Socket(,AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp,);,localSocket.Connect(iep,);,关闭连接的典型用法:,sock.Shutdown(SocketShutdown.Both,);,sock.Close,();,2.3.4,无连接的套接字编程,Socket(),Bind(),ReceiveFrom,(),SendTo,(),Close(),Socket(),Bind(),SendTo,(),ReceiveFrom,(),Close(),设备,1,设备,2,无连接套接字编程,2.3.5,对套接字封装后的类,TcpClient,类和,TcpListener,类,TcpClient,类是与,TCP,客户端相关的类,而,TcpListener,则用于在服务器端监听(,Listen,)客户端传来的连接请求。,两个类均对流式套接字进行了封装,简化了编程难度。,传输的数据可以使用,.NET Framework,中的流处理技术进行读写。,UdpClient,类,对数据报套接字进行了封装,该类使用,UdpClient,类的,Send,方法向网络发送数据,使用,Receive,方法接收传入的数据文报。,2.4,网卡信息检测与网络流量检测,System.Net.NetworkInformation,命名空间提供了:,对本机网卡相关信息的检测,比如本机有多少网卡,网卡名称、速度、硬件地址等。,对本机网络流量的检测比如网络连接配置、接收与发送的数据包等。,Ping,类检测本机是否可访问网络上的其它计算机。,这些类在高级网络信息处理中很有用。,2.4.1,获取网卡信息,NetworkInterface,类,NetworkInterface,类提供了网络适配器的配置和统计信息。可以利用这个类检测本机有多少个网络适配器、网络适配器型号以及网络适配器的速度等。,IPInterfaceProperties,类可以利用这个类检测本机所有网络适配器支持的各种地址,PhysicalAddress,类提供了网络适配器的媒体访问控制,(MAC),地址。,2.4.1,获取网卡信息(续),NetworkInterface,类常用的属性和方法,属性及方法,说明,Name,属性,获取网络适配器的名称,Speed,属性,获取网络适配器的速度(,bit/,秒),GetAllNetworkInterfaces,方法,返回描述本地计算机上的所有网络适配器对象,GetIPProperties,方法,回描述此网络适配器配置的对象,GetIsNetworkAvailable,方法,指示是否有任何可用的网络连接,GetPhysicalAddress,方法,返回此适配器的媒体访问控制,(MAC),地址,Supports,方法,指示,接口,是否支持指定的协议(,IPv4,或,IPv6,),2.4.1,获取网卡信息(续),IPInterfaceProperties,类(抽象类)常用的属性和方法,属性及方法,说明,AnycastAddresses,属性,获取分配给此接口的任意广播,IP,地址,DhcpServerAddresses,属性,获取此接口的动态主机配置协议(,DHCP,)服务器的地址,DnsAddresses,属性,获取此接口的域名系统(,DNS,)服务器的地址,DnsSuffix,属性,获取与此接口关联的域名系统(,DNS,)后缀,GatewayAddresses,属性,获取此接口的网关地址,MulticastAddresses,属性,获取分配给此接口的多路广播地址,UnicastAddresses,属性,获取分配给此接口的单播地址,GetIPv4Properties,方法,获取此网络接口的,Internet,协议版本,4,(,IPv4,)配置数据,GetIPv6Properties,方法,获取此网络接口的,Internet,协议版本,6,(,IPv6,)配置数据,2.4.1,获取网卡信息(续),【,例,2-2】,获取本机网络适配器的个数、型号、速度、,MAC,地址以及,DNS,服务器信息。,2.4.2,获取网络流量信息,IPGlobalProperties,类 提供本地计算机网络连接相关的信息。例如网络连接配置、接收与发送的数据包等。,一般用法:,using System;,using,System.Net.NetworkInformation,;,IPGlobalProperties,properties =,IPGlobalProperties.GetIPGlobalProperties,();,IPGlobalStatistics,ipstat,= properties.GetIPv4GlobalStatistics();,listBox1.Items.Add(,接收数据包数,: +,ipstat.ReceivedPackets,);,listBox1.Items.Add(,转发数据包数,: +,ipstat.ReceivedPacketsForwarded,);,listBox1.Items.Add(,传送数据包数,: +,ipstat.ReceivedPacketsDelivered,);,listBox1.Items.Add(,丢弃数据包数,: +,ipstat.ReceivedPacketsDiscarded,);,2.4.2,获取网络流量信息(续),TcpConnectionInformation,类提供有关本地计算机上的传输控制协议,(TCP),连接的信息。,IPGlobalProperties,properties =,IPGlobalProperties.GetIPGlobalProperties,();,TcpConnectionInformation, connections =,properties.GetActiveTcpConnections,();,foreach,(,TcpConnectionInformation,t in connections),string,str,= ;,str,+= Local endpoint: +,t.LocalEndPoint.Address,;,str,+= , Remote endpoint: +,t.RemoteEndPoint.Address,;,str,+= , +,t.State,;,listBox1.Items.Add(str);,2.4.2,获取网络流量信息(续),【,例,2-3】,检测本机网络流量以及,TCP,连接信息。,2.4.3 Ping,类,可以使用,Ping,类检测本机是否可访问网络上的其它计算机。类似于,Ping.exe,命令行工具。,该类提供的,Send,和,SendAsync,方法将,Internet,控制消息协议,(ICMP),回送请求消息发送到远程计算机并等待来自该计算机的,ICMP,回送答复消息。,与,Ping,类一起使用的类型有:,IPStatus,枚举:定义描述,ICMP,回送请求消息结果的状态代码,PingOptions,类:控制如何传输,Ping,数据包(见下页),PingReply,类:提供有关,Send,或,SendAsync,操作的状态及产生的数据的信息,2.4.3 Ping,类(续),PingOptions,类:控制如何传输,Ping,数据包。与此类相关的属性有:,Ttl,属性为,Ping,类发送的数据包指定生存时间。此值指示在丢弃,Ping,数据包之前可以转发此数据包的路由节点数。如果要测试将数据包从源计算机发送到目标计算机所需的转发数(也称为跃点),设置此选项很有用。,DontFragment,属性控制是否可将发送到远程主机的数据分成多个数据包。如果要测试用于传输数据包的路由器和网关的最大传输单元,(MTU),,此选项很有用。,2.4.3 Ping,类(续),用法,string,ipString,= 127.0.0.1;,Ping,pingSender,= new Ping();,PingOptions,options = new,PingOptions,();,options.DontFragment,= true;,string data = 12345678901234567890;,byte buffer =,Encoding.ASCII.GetBytes(data,);,int,timeout = 120;,PingReply,reply =,pingSender.Send(ipString, timeout, buffer, options);,if (,reply.Status,=,IPStatus.Success,),listBox1.Items.Add(Address: +,reply.Address.ToString,();,listBox1.Items.Add(RoundTrip time: +,reply.RoundtripTime,);,listBox1.Items.Add(Time to live: +,reply.Options.Ttl,);,listBox1.Items.Add(Buffer size: +,reply.Buffer.Length,);,2.4.3 Ping,类(续),【,例,2-4】Ping,类的用法。,2.5,字符编码与解码,编码:是指将一组字符转换为一个字节序列的过程。,解码:将一个编码字节序列转换为一组字符的过程。,为什么需要编码和解码因为通过网络传递的数据必须是字节序列。,常用编码,ASCII,码:每个字符均为,7,位,主要针对英文。,UNICODE,码:每个字符均占两个字节。,UTF,码:通用转换码,主要解决编码容量问题,常用有(,1,),UTF-8,:用,1,到,4,个字节编码一个,UNICODE,字符 (,2,),UTF-16,:将每个字符编码为,1,至,2,个,16,位整数组成的序列 (,3,),UTF-32,:将每个字符编码为一个,32,位整数,国标码:常用有,GB2312,(,1980,年公布,提供,65535,个汉字),GB18030,(,2000,年公布,提供,27484,个汉字),2.5.1 Encoding,类,Encoding,类位于,System.Text,命名空间中。,名称,说明,Default,属性,获取系统的当前,ANSI,代码页的编码,Unicode,属性,获取使用,Little-,Endian,字节顺序的,UTF-16,格式的编码,UTF8,属性,获取,UTF-8,格式的编码,Convert,方法,将字节数组从一种编码转换为另一种编码,GetBytes,方法,将一组字符编码为一个字节序列,GetString,方法,将一个字节序列解码为一个字符串,GetEncoder,方法,获取一个解码器,该解码器将,Unicode,字符序列转换为已编码的字节序列,GetDecoder,方法,获取一个解码器,该解码器将已编码的字节序列转换为字符序列,2.5.1 Encoding,类(续),用法举例:,Encoding GB2312 = Encoding.GetEncoding(GB2312);,Encoding GB18030 = Encoding.GetEncoding(GB18030);,/,将,Unicode,字符串转换为,UTF8,字符串:,string,unicodeString,= ,该字符串包含,unicode,字符,Pi(u03a0);,Encoding utf8 = Encoding.UTF8;,Encoding,unicode,=,Encoding.Unicode,;,/,将字符串转换为字节数组,byte,unicodeBytes,=,unicode.GetBytes(unicodeString,);,/,将,unicode,字节数组转换为,utf8,字节数组,byte utf8Bytes =,Encoding.Convert(Encoding.Unicode,Encoding.UTF8,unicodeBytes,);,/,将字节数组转换为字符串,string utf8String = Encoding.UTF8.GetString(utf8Bytes);,2.5.2 Encoder,类和,Decoder,类,Encoder,类:将一组字符转换为一个字节序列。举例:,Char chars = new Char u0023, / #,u0025, / %,u03a0, / Pi,u03a3 / Sigma,;,/,显示原始,Unicode,字符串,listBox1.Items.Add(new string(chars);,Encoder encoder = Encoding.UTF8.GetEncoder();,Byte bytes = new Byteencoder.GetByteCount(,chars, 0, chars.Length, true);,encoder.GetBytes(chars, 0,chars.Length, bytes, 0, true);,/,显示转换后的,UTF8,字符串,listBox1.Items.Add(Encoding.UTF8.GetString(bytes);,2.5.2 Encoder,类和,Decoder,类(续),Decoder,类:解码,将一个编码字节序列转换为一组字符。,举例:,byte bytes1 = 0x20, 0x23, 0xe2 ;,byte bytes2 = 0x98, 0xa3 ;,char chars = new char3;,Decoder d = Encoding.UTF8.GetDecoder();,int,charLen,= d.GetChars(bytes1, 0, bytes1.Length, chars, 0);,/ The value of,charLen,should be 2 now.,charLen,+= d.GetChars(bytes2, 0, bytes2.Length, chars,charLen,);,foreach(char,c in chars),Console.Write(U+0:X4 , (,ushort)c,);,2.6,网络流,流(,stream,)是对串行传输的数据(以字节为单位)的一种抽象表示,底层的设备可以是文件、外部设备、主存、网络套接字等。,流有三种基本的操作:写入、读取和查找。,若数据从内存缓冲区传输到外部源,这样的流叫作“写入流”。,若数据从外部源传输到内存缓冲区,这样的流叫作“读取流”。,在,System.Net.Sockets,名称空间中有一个,NetworkStream,类,用于通过网络套接字发送和接收数据。,NetworkStream,类支持对网络数据的同步或异步访问,它可被视为在数据来源端和接收端之间架设了一个数据通道,.,NetworkStream,流的数据传输,写,来源端,接收端,NetworkStream,读,对于,NetworkStream,流,写入操作是指从来源端内存缓冲区到网络上的数据传输;读取操作是从网络上到接收端内存缓冲区(如字节数组)的数据传输。,NetworkStream,的用法,2.6,网络流(续),本章作业及实验,作业:,P21,第,1,题、第,2,题,(单号下次交作业),实验:做实验一,设计型实验指导,第,2,次指导,MultiDraw.rar,代码讲解:,如何绘制矩形,如何绘制文字,如何绘制曲线,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!