您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 软件工程 > 第04章 UDP应用编程
1第4章UDP应用编程4.1UDP基础知识4.2UDP应用编程技术4.3利用UDP协议进行广播和组播24.1UDP基础知识UDP(UserDatagramProtocol)全称是用户数据报协议。是一个简单的、面向数据报的无连接协议,提供了快速但不一定可靠的传输服务。与TCP相比,UDP有如下一些特点:优点(1)UDP基于无连接的协议,速度比TCP更快。对于强调传输性能而不是传输完整性的应用(例如音频和多媒体应用),UDP是最好的选择;(2)UDP不但支持一对一连接,而且也支持一对多连接,可以使用广播的方式多地址发送,而TCP仅支持一对一的通信;(3)UDP与TCP的报头比是8:20,这使得UDP消耗的网络带宽更少(4)UDP传输的数据有消息边界,而TCP没有消息边界。34.1UDP基础知识缺点(1)UDP缺乏双方的握手信号,因此发送方无法了解数据报是否已经到达目标主机。如果在从发送方到接收方的传递过程中出现了数据包丢失,协议本身并不能做出任何检测或提示,因此可靠性不如TCP。(2)UDP没有任何对双方会话的支持,当接收多个数据报时,不能保证各数据包到达的顺序与发出的顺序相同。当然,UDP的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才可能发生。UDP与TCP的共同点都是构建于底层IP之上的传输层协议44.1UDP基础知识UDPTCP连接无连接面向连接速度无需建立连接,速度较快需要建立连接,速度较慢目的主机一对一,一对多仅能一对一带宽UDP报头较短,消耗带宽更少消耗更多的带宽消息边界有无可靠性低高顺序无序有序54.2UDP应用编程技术4.2.1UdpClient类4.2.2发送和接收数据的方法64.2.1UdpClient类UdpClient类提供了发送和接收无连接的UDP数据报的方便的方法。封装了底层的套接字,并分别提供了对套接字进一步封装后的同步和异步操作的方法,降低了UDP应用编程的难度。与TCP协议有TcpListener类和TcpClient类不同,UDP协议只有UdpClient类,这是因为UDP协议是无连接的协议,所以只需要一种Socket。74.2.1UdpClient类(续)位于System.Net.Sockets命名空间下构造函数有四种重载形式(见教材P94)。编写客户端程序时,常用形式为:UdpClientUdpClient=newUdpClient(“”,51888)它相当于:UdpClientudpClient=newUdpClient();udpClient.Connect();思考:UDP的Connect和TCP的Connect有什么不同?84.2.1UdpClient类(续)Send()发送数据报Receive()接收数据报BeginSend()开始从连接的socket中异步发送数据报BeginReceive()开始从连接的socket中异步接收数据报EndSend()结束挂起的异步发送数据报EndReceive()结束挂起的异步接受数据报JoinMulticastGroup()将UdpClient添加到多路广播组DropMulticastGroup()将UdpClient退出多路广播组Close()关闭Dispose()释放资源UdpClient类的常用方法94.2.1UdpClient类(续)Active获取或者设置一个值指示是否已建立默认远程主机Available获取或设置缓冲器中可用数据报的数量Client获取或设置基础网络套接字EnableBroadcast是否接收或发送广播ExclusiveAddressUse是否允许一个客户端使用指定端口UdpClient类的常用属性104.2.2发送和接收数据的方法编写基于UDP的应用程序时,关键在于如何实现数据的发送和接收。由于UDP不需要建立连接,因此可以在任何时候直接向网络中的任意主机发送UDP数据。在同步阻塞方式下,可以使用UdpClient对象的Send方法和Receive方法。Send:可直接将数据发送到远程主机,并返回发送数据的长度,Send方法发送数据的类型为byte数组。Receive:能够在指定的本地IP地址和端口上接收数据,该方法带一个引用类型的IPEndPoint实例,并将接收到的数据作为byte数组返回。114.2.2发送和接收数据的方法(续)udpClient.Send(Byte[],Int32)将UDP数据报发送到远程主机。Byte[]:指定发送的数据Int32:发送数据的数据长度说明:这种重载形式假定UDP客户端已经通过Connect方法指定了默认的远程主机,或者在实例化UdpClient时已经指定了远程服务器的IP和端口124.2.2发送和接收数据的方法(续)UdpClient.Send(Byte[],Int32,IPEndPoint)将UDP数据报发送到位于指定远程终结点的主机.Byte[]:待发送到远程主机的数据Int32:待发送到远程主机的数据长度IPEndPoint:远程主机端点,包含了应用程序连接到主机上的服务所需的IP地址和端口信息。说明:这种重载形式在参数中指定了远程主机的端点,在调用该方法前不需要指定远程主机的信息,如(不需要通过Connect方法指定远程主机端点,不需要在实例化UdpClient时指定远程服务器的IP和端口)134.2.2发送和接收数据的方法(续)UdpClient.Send(Byte[],Int32,String,Int32)将UDP数据报发送到指定的远程主机上的指定端口。Byte[]:待发送到远程主机的数据Int32:待发送到远程主机的数据长度String:远程主机名Int32:端口说明:这种重载形式在参数中指定了远程主机的端点,在调用该方法前不需要指定远程主机的信息,如(不需要通过Connect方法指定远程主机端点,不需要在实例化UdpClient时指定远程服务器的IP和端口)144.2.2发送和接收数据的方法(续)UdpClientmyUdpClient=newUdpClient();try{IPEndPointiep=newIPEndPoint(remoteIp,port);byte[]bytes=System.Text.Encoding.Unicode.GetBytes(textBox1.Text);myUdpClient.Send(bytes,bytes.Length,iep);}catch(Exceptionerr){MessageBox.Show(err.Message,发送失败);}发送方法示例154.2.2发送和接收数据的方法(续)接收方法示例(书上有错):UdpClientudpClient=newUdpClient(51666);IPEndPointremoteIpEndPoint=newIPEndPoint(IPAddress.Any,0);Try{Byte[]receiveBytes=udpClient.Receive(refremoteIpEndPoint);stringreceiveData=System.Text.Encoding.Unicode.GetString(receiveBytes);Console.WriteLine(接收到信息:+receiveData);}catch(Exceptione){MessageBox.Show(e.ToString());}164.2.3UDP网络聊天程序(续)设计界面174.2.3UDP网络聊天程序(续)运行效果184.3利用UDP进行广播和组播4.2.1通过Internet实现群发功能4.3.2在Internet上举行网络会议194.3.1通过Internet实现群发功能TCP通信采用一对一的通信模式。日常生活中的网络会议通知、广告、网络信息公告等功能,需要采用UDP实现一对多的群发功能。通过Internet实现群发功能的形式有两种:(1)利用广播向子网中的所有客户发送消息,比如各类通知、单位公告、集体活动日程安排等;(2)利用组播向Internet网上不同的子网发送消息,比如集团向其所属的公司或用户子网发布信息公告等。204.3.1通过Internet实现群发功能广播:就是指同时向子网中的多台计算机发送消息,并且所有子网中的计算机都可以接收到发送方发来的消息。每个广播消息包含一个特殊的IP地址,这个特殊地址的特点是子网内主机标示部分的二进制表示均为1。广播消息地址分为两种类型:本地广播:本地广播是指向子网中的所有计算机发送广播消息,其他网络不会受到本地广播的影响。IP地址分为两部分,网络标示部分(指定向哪个子网发送)和主机标示部分(全为1表示向该子网内的所有用户发送消息。),这两部分是靠子网掩码来区分的,我们把主机标示部分二进制表示全部为1的地址称为本地广播地址。全球广播:全球广播使用四个字节所有位全为1的IP地址,即点分十进制的255.255.255.255,这个特定的广播地址表明数据报的目的地是网络上的所有设备。但是由于路由器会自动过滤掉全球广播,所以使用这个地址没有实际意义。利用广播实现群发21例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.224.3.1通过Internet实现群发功能UdpClientmyUdpClient=newUdpClient();try{//让其自动提供子网中的IP广播地址IPEndPointiep=newIPEndPoint(IPAddress.Broadcast,8001);//允许发送和接收广播数据报myUdpClient.EnableBroadcast=true;//将发送内容转换为字节数组byte[]bytes=System.Text.Encoding.UTF8.GetBytes(textBox1.Text);//向子网发送信息myUdpClient.Send(bytes,bytes.Length,iep);}catch(Exceptionerr){MessageBox.Show(err.Message,发送失败);}finally{myUdpClient.Close();}广播发送数据方法234.3.1通过Internet实现群发功能利用广播技术向子网发送广播信息,同时接收子网中的任意主机发送的广播信息。设计界面(具体代码见教材P99的源程序)244.3.1通过Internet实现群发功能利用组播实现群发功能1、广播的通信模式虽然能够实现一对多的通信需要,但是,由于广播是向子网中的所有计算机用户发送消息,没有目的性,不但增加了网络传输负担,而且资源消耗较高。2、组播也叫多路广播。所谓组播是将消息从一台计算机发送到本网或全网内选择的计算机子集上,即发送到那些加入指定组播组的计算机上。254.3.1通过Internet实现群发功能组播组:是分享一个组播地址的一组设备。任何发送到组播地址的消息都会被发送到组内的所有成员设备上。组可以是永久的,也可以是临时的。大多数组播组是临时的,仅在有成员的时候才存在。组播地址:组播地址是范围在224.0.0.0到239.255.255.255的D类IP地址。IP组播使用特殊的IP地址范围来表示不同的组播组。用户创建一个新的组播组时只需从地址范围内选出一个地址,然后为这个地址构造一个对象,就可以开始发送消息了。264.3.1通过Internet实现群发功能加入组播组在UdpClient类中,使用JoinMulticastGroup方法将UdpClient对象和TTL一
本文标题:第04章 UDP应用编程
链接地址:https://www.777doc.com/doc-7037632 .html