资源描述
主标题,一级标题,二级标题,*,4.1,UDP基础知识,UDP(User Datagram Protocol)全称是用户数据报协议。是一个简单的、面向数据报的无连接协议,提供了快速但不一定可靠的传输服务。,与TCP相比,UDP有如下一些特点:,优点,(1)UDP基于无连接的协议,速度比TCP更快。对于强调传输性能而不是传输完整性的应用(例如音频和多媒体应用),UDP是最好的选择;,(2)UDP不但支持一对一连接,而且也支持一对多连接,可以使用广播的方式多地址发送,而TCP仅支持一对一的通信;,(3)UDP与TCP的报头比是8:20,这使得UDP消耗的网络带宽更少,(4)UDP传输的数据有消息边界,而TCP没有消息边界。,4.1,UDP基础知识,缺点,(1),UDP缺乏双方的握手信号,因此发送方无法了解数据报是否已经到达目标主机。如果在从发送方到接收方的传递过程中出现了数据包丢失,协议本身并不能做出任何检测或提示,因此,可靠性,不如TCP。,(2)UDP没有任何对双方会话的支持,当接收多个数据报时,,不能保证各数据包到达的顺序与发出的顺序相同,。当然,UDP的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才可能发生。,UDP与TCP的共同点,都是构建于底层IP之上的传输层协议,4.1,UDP基础知识,UDP,TCP,连接,无连接,面向连接,速度,无需建立连接,速度较快,需要建立连接,速度较慢,目的主机,一对一,一对多,仅能一对一,带宽,UDP报头较短,消耗带宽更少,消耗更多的带宽,消息边界,有,无,可靠性,低,高,顺序,无序,有序,4.2,UDP应用编程技术,4.2.1 UdpClient类,4.2.2 发送和接收数据的方法,4.2.1 UdpClient类,UdpClient,类提供了发送和接收无连接的UDP数据报的方便的方法。封装了底层的套接字,并分别提供了对套接字进一步封装后的同步和异步操作的方法,降低了UDP应用编程的难度。,与TCP协议有TcpListener类和TcpClient类不同,UDP协议只有UdpClient类,这是因为UDP协议是无连接的协议,所以只需要一种Socket。,4.2.1 UdpClient类(续),位于System.Net.Sockets命名空间下,构造函数有四种重载形式(见教材P94)。编写客户端程序时,常用形式为:UdpClient UdpClient=new UdpClient(“”,51888)它相当于:UdpClient udpClient=new UdpClient();udpClient.Connect(,51888);,思考:,UDP的Connect和TCP的Connect有什么不同?,4.2.1 UdpClient类(续),Send(),发送数据报,Receive(),接收数据报,BeginSend(),开始从连接的socket中异步发送数据报,BeginReceive(),开始从连接的socket中异步接收数据报,EndSend(),结束挂起的异步发送数据报,EndReceive(),结束挂起的异步接受数据报,JoinMulticastGroup(),将UdpClient添加到多路广播组,DropMulticastGroup(),将UdpClient退出多路广播组,Close(),关闭,Dispose(),释放资源,UdpClient类的常用方法,4.2.1 UdpClient类(续),Active,获取或者设置一个值指示是否已建立默认远程主机,Available,获取或设置缓冲器中可用数据报的数量,Client,获取或设置基础网络套接字,EnableBroadcast,是否接收或发送广播,ExclusiveAddressUse,是否允许一个客户端使用指定端口,UdpClient类的常用属性,4.2.2 发送和接收数据的方法,编写基于UDP的应用程序时,关键在于如何实现数据的发送和接收。由于UDP不需要建立连接,因此可以在任何时候直接向网络中的任意主机发送UDP数据。在同步阻塞方式下,可以使用UdpClient对象的Send方法和Receive方法。,Send:,可直接将数据发送到远程主机,并,返回发送数据的长度,Send方法发送数据的类型为byte数组。,Receive:,能够在指定的本地IP地址和端口上接收数据,该方法,带一个引用类型的IPEndPoint实例,,,并将接收到的数据作为,byte数组,返回。,4.2.2 发送和接收数据的方法(续),udpClient.Send(Byte,Int32)将UDP数据报发送到远程主机。,Byte:指定发送的数据,Int32:发送数据的数据长度,说明:,这种重载形式假定UDP客户端已经通过Connect方法指定了默认的远程主机,或者在实例化UdpClient时已经指定了远程服务器的IP和端口,4.2.2 发送和接收数据的方法(续),UdpClient.Send(Byte,Int32,IPEndPoint)将 UDP数据报发送到位于指定远程终结点的主机.,Byte:待发送到远程主机的数据,Int32:待发送到远程主机的数据长度,IPEndPoint:远程主机端点,包含了应用程序连接到主机上的服务所需的IP地址和端口信息。,说明:,这种重载形式在参数中指定了远程主机的端点,在调用该方法前不需要指定远程主机的信息,如(,不需要通过Connect方法指定远程主机端点,不需要在实例化UdpClient时指定远程服务器的IP和端口,),4.2.2 发送和接收数据的方法(续),UdpClient.Send(Byte,Int32,String,Int32),将,UDP,数据报发送到指定的远程主机上的指定端口。,Byte:,待发送到远程主机的数据,Int32:,待发送到远程主机的数据长度,String,:,远程主机名,Int32:,端口,说明:,这种重载形式在参数中指定了远程主机的端点,在调用该方法前不需要指定远程主机的信息,如(,不需要通过Connect方法指定远程主机端点,不需要在实例化UdpClient时指定远程服务器的IP和端口,),4.2.2 发送和接收数据的方法(续),UdpClient myUdpClient=new UdpClient();,try,IPEndPoint iep=new IPEndPoint(remoteIp,port);,byte bytes=System.Text.Encoding.Unicode.GetBytes(textBox1.Text);,myUdpClient.Send(bytes,bytes.Length,iep);,catch(Exception err),MessageBox.Show(err.Message,发送失败);,发送方法示例,4.2.2 发送和接收数据的方法(续),接收方法示例,(,书上有错,):,UdpClient udpClient=new UdpClient(51666);,IPEndPoint,remoteIpEndPoint,=new IPEndPoint(IPAddress.Any,0);,Try,Byte receiveBytes=udpClient.Receive(,ref remoteIpEndPoint,);,string receiveData=,System.Text.Encoding.Unicode.GetString(receiveBytes);,Console.WriteLine(接收到信息:+receiveData);,catch(Exception e),MessageBox.Show(e.ToString();,4.2.3 UDP网络聊天程序(续),设计界面,4.2.3 UDP网络聊天程序(续),运行效果,4.3 利用UDP进行广播和组播,4.2.1 通过Internet实现群发功能,4.3.2 在Internet上举行网络会议,4.3.1 通过Internet实现群发功能,TCP通信采用一对一的通信模式。日常生活中的,网络会议通知、广告、网络信息公告等功能,需要采用UDP实现一对多的群发功能。,通过Internet实现群发功能的形式有两种:,(1)利用,广播,向子网中的所有客户发送消息,比如各类通知、单位公告、集体活动日程安排等;,(2)利用,组播,向Internet网上不同的子网发送消息,比如集团向其所属的公司或用户子网发布信息公告等。,4.3.1 通过Internet实现群发功能,广播,:,就是指同时向子网中的多台计算机发送消息,并且,所有子网中的计算机,都可以接收到发送方发来的消息。每个广播消息包含一个特殊的IP地址,这个特殊地址的特点是子网内主机标示部分的二进制表示均为1。,广播消息地址分为两种类型:,本地广播,:,本地广播是指向子网中的所有计算机发送广播消息,其他网络不会受到本地广播的影响。,IP地址分为两部分,网络标示部分(,指定向哪个子网发送,)和主机标示部分(,全为1表示向该子网内的所有用户发送消息。,),这两部分是靠子网掩码来区分的,我们把主机标示部分二进制表示全部为1的地址称为本地广播地址。,全球广播,:,全球广播使用四个字节所有位全为1的IP地址,即点分十进制的255.255.255.255,这个特定的广播地址表明数据报的目的地是网络上的所有设备。但是由于路由器会自动过滤掉全球广播,所以使用这个地址没有实际意义。,利用广播实现群发,例1:,对于B类网络192.168.0.0,使用子网掩码255.255.0.0。本地广播地址应为:,利用广播实现群发,4.3.1 通过Internet实现群发功能,答:,本地广播地址是192.168.255.255.,例2:,对于B类网络192.168.100.0,使用子网掩码255.255.255.0。本地广播地址应为:,答:,本地广播地址是192.168.100.255.,4.3.1 通过Internet实现群发功能,UdpClient myUdpClient=new UdpClient();,try,/,让其自动提供子网中的,IP,广播地址,IPEndPoint iep=new IPEndPoint(,IPAddress.Broadcast,8001);,/,允许发送和接收广播数据报,myUdpClient.EnableBroadcast=true;,/,将发送内容转换为字节数组,byte bytes=System.Text.Encoding.UTF8.GetBytes(textBox1.Text);,/,向子网发送信息,myUdpClient.Send(bytes,bytes.Length,iep);,catch(Exception err),MessageBox.Show(err.Message,发送失败,);,finally,myUdpClient.Close();,广播发送数据方法,4.3.1 通过Internet实现群发功能,利用,广播,技术向子网发送广播信息,同时接收子网中的任意主机发送的广播信息。,设计界面(具体代码见教材P99的源程序),4.3.1 通过Internet实现群发功能,利用组播实现群发功能,1、广播的通信模式虽然能够实现一对多的通信需要,但是,由于广播是向子网中的所有计算机用户发送消息,没有目的性,不但增加了网络传输负担,而且资源消耗较高。,2、,组播,也叫多路广播。所谓组播是将消息从一台计算机发送到,本网或全网内选择的计算机子集,上,即发送到那些加入指定组播组的计算机上。,4.3.1 通过Internet实现群发功能,组播组:,是分享一个组播地址的一组设备。任何发送到组播地址的消息都会被发送到组内的所有成员设备上。组可以是永久的,也可以是临时的。大多数组播组是临时的,仅在有成员的时候才存在。,组播地址:,组播地址是范围在224.0.0.0到239.255.255.255的D类IP地址。IP组播使用特殊的IP地址范围来表示不同的组播组。,用户创建一个新的组播组时只需从地址范围内选出一个地址,然后为这个地址构造一个对象,就可以开始发送消息了。,4.3.1 通过Internet实现群发功能,加入组播组,在UdpClient类中,使用JoinMulticastGroup方法将UdpClient对象和TTL一起加入组播组,使用DropMulticastGroup退出组播组。例如:,/创建UdpClient的实例并设置使用的本地端口号,UdpClient udpClient=new UdpClient(8001);,udpClient.JoinMulticastGroup(IPAddress.Parse(224.100.0.1);,或者:,UdpClient udpClient=new UdpClient(8001);,udpClient.JoinMulticastGroup(IPAddress.Parse(224.100.0.1),50);,其中50为TTL值。,4.3.1 通过Internet实现群发功能,使用组播时,应注意的是TTL(Time To Live,生存周期)值的设置。TTL值是允许路由器转发的最大数目,当达到这个最大值时,数据包就会被丢弃。如果使用默认值(默认值为1),则只能在子网中发送。可以通过UdpClient对象的Ttl属性直接设置TTL值,例如:,UdpClient myUdpClient=new UdpClient();,myUdpClient.TTL=50;,该语句设置TTL值为50,即最多允许50次路由器转发。,4.3.1 通过Internet实现群发功能,组播发送数据方法示例,4.3.1 通过Internet实现群发功能,组播和广播的区别:,(1)本地广播无法通过路由器,广播只是限于本网段内,遇到路由器则止。同网段内其他在指定端口侦听的程序都能收到该包都需要一个数据copy。组播没有这个限制,只要加入组就能收到数据包。,(2)由于广播是向某个子网中的所有计算机用户发送消息,没有目的性,会增加网络传输负担,而且资源消耗较高。组播将消息发送到加入指定组播组的计算机中,组播组是开放的,每台计算机都可以通过程序随时加入到组播组中,也可以随时离开,因此减少了不必要的网络传输负担。,4.3.1 通过Internet实现群发功能,利用组播技术向子网发送组播信息,同时接收组播信息。,设计界面(具体代码见教材P103的源程序),4.3.2 在Internet上举行网络会议,利用组播技术进行网络会议讨论(参见教材P106),网络中的任何人都可以加入讨论,所有发言者发送的信息都发送到会议讨论组,讨论组中的每个人都可以看到任何人发送的信息,本章作业及实验,作业1、2(与上一章一块交),实验(1)做实验三(网络呼叫应答与提醒)(2)继续设计型实验,
展开阅读全文