c#网络应用编程第06章 UDP应用编程.ppt
《c#网络应用编程第06章 UDP应用编程.ppt》由会员分享,可在线阅读,更多相关《c#网络应用编程第06章 UDP应用编程.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 1第第6 6章章 UDPUDP应用编程应用编程 6.1 UDP基基础础知知识识6.2 UDP应用用编程技程技术6.3 利用利用UDP协议进行广播和行广播和组播播2 2本章教学目的本章教学目的学学习UDP基基础础知知识识,利用,利用UdpClient类完成完成单播、播、组播和广播。播和广播。本章教学要求本章教学要求(1)掌握)掌握UDP协议同同TCP协议相比的相比的优缺点。缺点。(2)掌握)掌握组播和广播的概念播和广播的概念(3)掌握)掌握UdpClient实现单播播发送数据和接收数据的方法。送数据和接收数据的方法。(4)掌握)掌握UdpClient类实现组播及广播通信的方法。播及广播通信的
2、方法。教学教学难点和重点点和重点 UDP协议同同TCP协议相比的相比的优缺点缺点,利用利用UdpClient类完成完成单播、播、组播和广播和广播。播。本章重点本章重点3 36.1 UDP6.1 UDP与与TCPTCP的区别的区别UDP(User Datagram Protocol,用,用户数据数据报协议)是一个)是一个简单的、面的、面向数据向数据报的无的无连接接协议,提供了快速但不一定可,提供了快速但不一定可靠的靠的传输服服务。UDP与与TCP相比主要有以下区相比主要有以下区别。1UDP速度比速度比TCP快快2UDP有消息有消息边界界3UDP可以一可以一对多多传输4UDP可靠性不如可靠性不如T
3、CP5UDP不像不像TCP那那样能保能保证有序有序传输4 46.1 UDP6.1 UDP与与TCPTCP的区别的区别(续)续)UDP速度比速度比TCP快快由于由于UDP不需要先与不需要先与对方建立方建立连接,也不需要接,也不需要传输确确认,因此其数据因此其数据传输速度比速度比TCP快得多。快得多。UDP有消息有消息边界界使用使用UDP不需要考不需要考虑消息消息边界界问题,使用上比,使用上比TCP简单UDP可以一可以一对多多传输利用利用UDP可以使用广播或可以使用广播或组播的方式同播的方式同时向子网上的所有向子网上的所有客客户发送信息。送信息。这一点也比一点也比TCP方便。方便。5 56.1 U
4、DP6.1 UDP与与TCPTCP的区别的区别(续)续)UDP可靠性不如可靠性不如TCP与与TCP不同,不同,UDP并不提供数据并不提供数据传送的保送的保证机制。如果在机制。如果在从从发送方到接收方的送方到接收方的传递过程中出程中出现数据数据报的的丢失,失,协议本身并不能做出任何本身并不能做出任何检测或提示。因此,通常人或提示。因此,通常人们把把UDP称称为不可靠的不可靠的传输协议。UDP不像不像TCP那那样能保能保证有序有序传输UDP不能确保数据的不能确保数据的发送和接收送和接收顺序。序。对于突于突发性的性的数据数据报,有可能会乱序。事,有可能会乱序。事实上,上,UDP的的这种乱序性基本种乱
5、序性基本上很少出上很少出现,通常只会在网,通常只会在网络非常非常拥挤的情况下才有可能的情况下才有可能发生。生。6 66.1 UDP6.1 UDP与与TCPTCP的区别的区别(续)续)UDPTCP连接连接无连接无连接面向连接面向连接速度速度无需建立连接,速度无需建立连接,速度较快较快需要建立连接,速度较慢需要建立连接,速度较慢目的主机目的主机一对一,一对多一对一,一对多仅能一对一仅能一对一带宽带宽UDP报头较短,消耗报头较短,消耗带宽更少带宽更少消耗更多的带宽消耗更多的带宽消息边界消息边界有有无无可靠性可靠性低低高高顺序顺序无序无序有序有序7 76.2 UDP6.2 UDP应用编程技术应用编程技
6、术6.2.1 UdpClient类 6.2.2 同步同步发送和接收数据送和接收数据6.2.3 异步异步发送和接收数据送和接收数据8 86.2.1 UdpClient6.2.1 UdpClient类类UdpClient类提供了提供了发送和接收无送和接收无连接的接的UDP数据数据报的方便的方法。封的方便的方法。封装了底装了底层的套接字,并分的套接字,并分别提供了提供了对套接字套接字进一步封装后的一步封装后的同步和异步操作的方法,降低了同步和异步操作的方法,降低了UDP应用用编程的程的难度。度。与与TCP协议有有TcpListener类和和TcpClient类不同,不同,UDP协议只有只有UdpCl
7、ient类,这是因是因为UDP协议是无是无连接的接的协议,所,所以只需要一种以只需要一种Socket。9 96.2.1 UdpClient6.2.1 UdpClient类(续)类(续)位于位于System.Net.Sockets命名空命名空间下下构造函数有四种重构造函数有四种重载形式。形式。编写客写客户端程序端程序时,常用形式,常用形式为:UdpClient UdpClient=new UdpClient(“”,51888)它相当于:它相当于:UdpClient udpClient=new UdpClient();udpClient.Connect(,51888);思考:思考:UDP的的Con
8、nect和和TCP的的Connect有什么不同?有什么不同?10106.2.1 UdpClient6.2.1 UdpClient类(续)类(续)(1)public UdpClient(int port)自自动分配合适的本地分配合适的本地IPv4地址,并将基地址,并将基础socket与指定的与指定的本地端口号本地端口号绑定。例如:定。例如:UdpClient udpClient=new UdpClient(51666);如果如果仅仅是是为了了发送数据送数据报,而且接收方又能接收任何,而且接收方又能接收任何远程端口程端口发送送给它的数据它的数据报,在在这种情况下,种情况下,可以将可以将本地端本地端
9、口号口号指定指定为0,表示,表示让系系统自自动为其分配一个合适的端口号。其分配一个合适的端口号。由于由于这种形式种形式不需要我不需要我们考考虑指定的端口号是否会指定的端口号是否会产生冲生冲突,因此突,因此这是是创建建UdpClient对象最方便的方式。象最方便的方式。11116.2.1 UdpClient6.2.1 UdpClient类(续)类(续)(2)public UdpClient(IPEndPoint localEp)与包含本地与包含本地IP地址和端口号的地址和端口号的IPEndPoint实例例绑定。定。例如:例如:IPAddress address=Dns.GetHostAddres
10、ses(Dns.GetHostName()0;IPEndPoint iep=new IPEndPoint(address,51666);UdpClient udpClient=new UdpClient(iep);注意:注意:如果如果创建的建的UdpClient对象主要用于接收象主要用于接收远程主机向本程主机向本机指定端口机指定端口发送来的数据送来的数据报,使用,使用这种方式比种方式比较合适。合适。这是是因因为端口号是固定的,只要端口号是固定的,只要远程主机知道本机的域名或程主机知道本机的域名或IP地址地址,它就可以直接向本机的指定端口,它就可以直接向本机的指定端口发送数据送数据报。12126
11、.2.1 UdpClient6.2.1 UdpClient类(续)类(续)(3)public UdpClient(string hostname,int port)自自动分配合适的本地分配合适的本地IP地址和端口号,用于收地址和端口号,用于收发数据,并数据,并使用使用hostname和和port参数建立默参数建立默认远程主机。例如:程主机。例如:UdpClient udpClient=new UdpClient(,11000);适用于向默适用于向默认远程主机程主机发数据,或者只接收默数据,或者只接收默认远程主机程主机发来的数据,而其他主机来的数据,而其他主机发送来的数据送来的数据报自自动丢弃的
12、弃的场合。合。使用使用这种构造函数,种构造函数,调用用UdpClient对象的象的Send方法方法发送送数据数据报时,不能在,不能在Send参数中再指定参数中再指定远程主机,否程主机,否则会引会引发异常。当需要改异常。当需要改变发送目送目标时,可以,可以调用用Connect方法方法重新建立新的默重新建立新的默认远程主机。程主机。13136.2.1 UdpClient6.2.1 UdpClient类(续)类(续)(4)public UdpClient()自自动分配合适的本地分配合适的本地IPv4地址和端口号,但是地址和端口号,但是该构造函数不构造函数不执行套接字行套接字绑定。如果使用定。如果使用
13、这种构造函数,在种构造函数,在发送数据送数据报之之前,必前,必须先先调用用Connect方法,且只能将数据方法,且只能将数据报发送到送到Connect方法建立的方法建立的远程主机。例如:程主机。例如:UdpClient udpClient=new UdpClient();/指定默指定默认远程主机和端口号程主机和端口号udpClient.Connect(,51666);Byte sendBytes=Encoding.Unicode.GetBytes(你好你好!);/发送送给默默认远程主机程主机udpClient.Send(sendBytes,sendBytes.Length);注意:注意:由于由
14、于这种构造函数不种构造函数不执行套接字行套接字绑定,因此如果希望定,因此如果希望加入多路广播加入多路广播组,不要使用,不要使用这种构造函数。种构造函数。14146.2.1 UdpClient6.2.1 UdpClient类(续)类(续)Connect方法方法 建立默认远程主机。因为建立默认远程主机。因为UDPUDP是无连接的,是无连接的,所以不会阻止调用该方法的线程。另外,如所以不会阻止调用该方法的线程。另外,如果打算接收多路广播数据报,不要调用果打算接收多路广播数据报,不要调用ConnectConnect方法,否则从指定的默认地址以外方法,否则从指定的默认地址以外的地址到达的任何数据报都将被
15、丢弃。但是,的地址到达的任何数据报都将被丢弃。但是,如果在调用如果在调用SendSend方法时指定了方法时指定了IPAddress.BroadcastIPAddress.Broadcast,则可以将数据广播,则可以将数据广播到默认的广播地址到默认的广播地址255.255.255.255 255.255.255.255 Send方法方法发送数据报发送数据报Receive方法方法接收数据报接收数据报BeginSend方法方法开始从连接的开始从连接的socketsocket中异步发送数据报中异步发送数据报BeginReceive方法方法 开始从连接的开始从连接的socketsocket中异步接收数据
16、报中异步接收数据报UdpClientUdpClient类的常用方法和属性类的常用方法和属性15156.2.1 UdpClient6.2.1 UdpClient类(续)类(续)EndSend方法方法结束挂起的异步发送数据报结束挂起的异步发送数据报EndReceive方法方法结束挂起的异步接受数据报结束挂起的异步接受数据报JoinMulticastGroup方法方法将将UdpClient添加到多路广播组添加到多路广播组DropMulticastGroup方法方法将将UdpClient退出多路广播组退出多路广播组Close方法方法关闭关闭Active属性属性获取或者设置一个值指示是否已建立获取或者设
17、置一个值指示是否已建立默认远程主机默认远程主机Available属性属性获取或设置缓冲器中可用数据报的数获取或设置缓冲器中可用数据报的数量量Client属性属性获取或设置基础网络套接字获取或设置基础网络套接字 EnableBroadcast属性属性是否接收或发送广播是否接收或发送广播UdpClientUdpClient类的常用方法属性类的常用方法属性16166.2.2 6.2.2 同步发送和接收数据同步发送和接收数据编写基于写基于UDP的的应用程序用程序时,关,关键在于如何在于如何实现数据的数据的发送和接收。由于送和接收。由于UDP不需要建立不需要建立连接,因此可以在任何接,因此可以在任何时候
18、直接向网候直接向网络中的任意主机中的任意主机发送送UDP数据。在同步阻塞方数据。在同步阻塞方式下,可以使用式下,可以使用UdpClient对象的象的Send方法和方法和Receive方方法。法。Send:可直接将数据可直接将数据发送到送到远程主机,并程主机,并返回返回发送数据的送数据的长度,度,Send方法方法发送数据的送数据的类型型为byte数数组。Receive:能能够在指定的本地在指定的本地IP地址和端口上接收数据,地址和端口上接收数据,该方法方法带一个引用一个引用类型的型的IPEndPoint实例例,并将接收到的数并将接收到的数据作据作为byte数数组返回。返回。17176.2.2 6
19、.2.2 同步发送和接收数据同步发送和接收数据(续续)发送数据:送数据:(1)udpClient.Send(Byte,Int32)Byte:指定:指定发送的数据送的数据Int32:发送数据的数据送数据的数据长度度 说明:明:这种重种重载形式假定形式假定UDP客客户端已端已经通通过Connect方法方法指定了默指定了默认的的远程主机,或者在程主机,或者在实例化例化UdpClient时已已经指定指定了了远程服程服务器的器的IP和端口和端口1818UdpClient.Send(Byte,Int32,IPEndPoint)将将 UDP数据数据报发送到位于指定送到位于指定远程程终结点的主机。点的主机。B
20、yte:待:待发送到送到远程主机的数据程主机的数据Int32:待待发送到送到远程主机的数据程主机的数据长度度IPEndPoint:远程主机端点,包含了程主机端点,包含了应用程序用程序连接到主接到主 机上的服机上的服务所需的所需的IP地址和端口信息。地址和端口信息。说明:明:使用使用这种方法种方法时,通,通过将将IPEndPoint的的Address属性属性指指定定为SocketOptionName.Broadcast,可将数据,可将数据报发送到默送到默认广播地址广播地址255.255.255.255。6.2.2 6.2.2 同步发送和接收数据同步发送和接收数据(续续)19196.2.2 6.2
21、.2 同步发送和接收数据同步发送和接收数据(续续)UdpClient.Send(Byte,Int32,String,Int32)将将UDP数据数据报发送到指定的送到指定的远程主机上的指定端口。程主机上的指定端口。Byte:待:待发送到送到远程主机的数据程主机的数据Int32:待:待发送到送到远程主机的数据程主机的数据长度度String:远程主机名程主机名Int32:端口端口说明:明:使用使用这种方法种方法时,不能用,不能用Connect建立默建立默认远程主机,否程主机,否则将引将引发异常。另外,如果将异常。另外,如果将hostname参数参数值指定指定为“255.255.255.255”,可将
22、数据,可将数据报发送到默送到默认广播地址广播地址20206.2.2 6.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.Messag
23、e,发送失送失败);发送方法示例发送方法示例21216.2.2 6.2.2 同步发送和接收数据同步发送和接收数据(续续)UdpClient对象的象的Receive方法用于方法用于获取从从取从从远程主机程主机发送的送的UDP数据数据报。语法形式如下:法形式如下:public byte Receive(ref IPEndPoint remoteEP)IPEndPoint参数参数:表示表示发送方的送方的IP地址和端口号地址和端口号返回返回值:为接收到的字接收到的字节数数组。注意:利用此方法既可以接收指定注意:利用此方法既可以接收指定远程主机的数据程主机的数据报,也可,也可以接收所有以接收所有远程主机
24、的数据程主机的数据报。如接收所有如接收所有远程主机程主机发的数据的数据报,可用下面的代,可用下面的代码创建:建:IPEndPoint RemoteIpEndPoint=new IPEndPoint(IPAddress.Any,0);IPAddress.Any表示表示对方的方的IP地址可以是任何地址可以是任何IP地址地址0表示表示对方的端口号可以是任何端口号。方的端口号可以是任何端口号。22226.2.2 6.2.2 同步发送和接收数据同步发送和接收数据(续续)接收数据示例:接收数据示例:UdpClient udpClient=new UdpClient(Dns.GetHostAddresses
25、(Dns.GetHostName()0,18001);IPEndPoint remoteIpEndPoint=new IPEndPoint(IPAddress.Any,0);try Byte receiveBytes=udpClient.Receive(ref remoteIpEndPoint);string receiveData=Encoding.Unicode.GetString(receiveBytes);Console.WriteLine(接收到信息:接收到信息:+receiveData);catch(Exception e)MessageBox.Show(e.ToString();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c#网络应用编程第06章 UDP应用编程 c# 网络 应用 编程 06 UDP
限制150内