C#网络应用编程 第2版 教学课件 PPT 作者 马骏 第06章 UDP应用编程

上传人:E**** 文档编号:89345175 上传时间:2019-05-23 格式:PPT 页数:50 大小:488KB
返回 下载 相关 举报
C#网络应用编程 第2版  教学课件 PPT 作者 马骏 第06章 UDP应用编程_第1页
第1页 / 共50页
C#网络应用编程 第2版  教学课件 PPT 作者 马骏 第06章 UDP应用编程_第2页
第2页 / 共50页
C#网络应用编程 第2版  教学课件 PPT 作者 马骏 第06章 UDP应用编程_第3页
第3页 / 共50页
C#网络应用编程 第2版  教学课件 PPT 作者 马骏 第06章 UDP应用编程_第4页
第4页 / 共50页
C#网络应用编程 第2版  教学课件 PPT 作者 马骏 第06章 UDP应用编程_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《C#网络应用编程 第2版 教学课件 PPT 作者 马骏 第06章 UDP应用编程》由会员分享,可在线阅读,更多相关《C#网络应用编程 第2版 教学课件 PPT 作者 马骏 第06章 UDP应用编程(50页珍藏版)》请在金锄头文库上搜索。

1、第6章 UDP应用编程,6.1 UDP基础知识 6.2 UDP应用编程技术 6.3 利用UDP协议进行广播和组播,本章教学目的 学习UDP基础知识 ,利用UdpClient类完成单播、组播和广播。 本章教学要求 (1)掌握UDP协议同TCP协议相比的优缺点。 (2)掌握组播和广播的概念 (3)掌握UdpClient实现单播发送数据和接收数据的方法。 (4)掌握UdpClient类实现组播及广播通信的方法。 教学难点和重点 UDP协议同TCP协议相比的优缺点,利用UdpClient类完成单播、组播和广播。,本章重点,6.1 UDP与TCP的区别,UDP(User Datagram Protoco

2、l,用户数据报协议)是一个简单的、面向数据报的无连接协议,提供了快速但不一定可靠的传输服务。 UDP与TCP相比主要有以下区别。 1UDP速度比TCP快 2UDP有消息边界 3UDP可以一对多传输 4UDP可靠性不如TCP 5UDP不像TCP那样能保证有序传输,6.1 UDP与TCP的区别(续),UDP速度比TCP快 由于UDP不需要先与对方建立连接,也不需要传输确认,因此其数据传输速度比TCP快得多。 UDP有消息边界 使用UDP不需要考虑消息边界问题,使用上比TCP简单 UDP可以一对多传输 利用UDP可以使用广播或组播的方式同时向子网上的所有客户发送信息。这一点也比TCP方便。,6.1

3、UDP与TCP的区别(续),UDP可靠性不如TCP 与TCP不同,UDP并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP称为不可靠的传输协议。 UDP不像TCP那样能保证有序传输 UDP不能确保数据的发送和接收顺序。对于突发性的数据报,有可能会乱序。事实上,UDP的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生。,6.1 UDP与TCP的区别(续),6.2 UDP应用编程技术,6.2.1 UdpClient类 6.2.2 同步发送和接收数据 6.2.3 异步发送和接收数据,6.2.1

4、UdpClient类,UdpClient类提供了发送和接收无连接的UDP数据报的方便的方法。封装了底层的套接字,并分别提供了对套接字进一步封装后的同步和异步操作的方法,降低了UDP应用编程的难度。 与TCP协议有TcpListener类和TcpClient类不同,UDP协议只有UdpClient类,这是因为UDP协议是无连接的协议,所以只需要一种Socket。,6.2.1 UdpClient类(续),位于System.Net.Sockets命名空间下 构造函数有四种重载形式。编写客户端程序时,常用形式为: UdpClient UdpClient=new UdpClient(“”, 51888)

5、 它相当于: UdpClient udpClient=new UdpClient(); udpClient.Connect(““, 51888); 思考:UDP的Connect和TCP的Connect有什么不同?,6.2.1 UdpClient类(续),(1)public UdpClient(int port) 自动分配合适的本地IPv4地址,并将基础socket与指定的本地端口号绑定。例如: UdpClient udpClient = new UdpClient(51666); 如果仅仅是为了发送数据报,而且接收方又能接收任何远程端口发送给它的数据报,在这种情况下,可以将本地端口号指定为0,

6、表示让系统自动为其分配一个合适的端口号。由于这种形式不需要我们考虑指定的端口号是否会产生冲突,因此这是创建UdpClient对象最方便的方式。,6.2.1 UdpClient类(续),(2)public UdpClient(IPEndPoint localEp) 与包含本地IP地址和端口号的IPEndPoint实例绑定。 例如: IPAddress address = Dns.GetHostAddresses(Dns.GetHostName()0; IPEndPoint iep = new IPEndPoint(address, 51666); UdpClient udpClient =new

7、 UdpClient(iep); 注意:如果创建的UdpClient对象主要用于接收远程主机向本机指定端口发送来的数据报,使用这种方式比较合适。这是因为端口号是固定的,只要远程主机知道本机的域名或IP地址,它就可以直接向本机的指定端口发送数据报。,6.2.1 UdpClient类(续),(3)public UdpClient(string hostname, int port) 自动分配合适的本地IP地址和端口号,用于收发数据,并使用hostname和port参数建立默认远程主机。例如: UdpClient udpClient = new UdpClient(““, 11000); 适用于向默

8、认远程主机发数据,或者只接收默认远程主机发来的数据,而其他主机发送来的数据报自动丢弃的场合。 使用这种构造函数,调用UdpClient对象的Send方法发送数据报时,不能在Send参数中再指定远程主机,否则会引发异常。当需要改变发送目标时,可以调用Connect方法重新建立新的默认远程主机。,6.2.1 UdpClient类(续),(4)public UdpClient() 自动分配合适的本地IPv4地址和端口号,但是该构造函数不执行套接字绑定。如果使用这种构造函数,在发送数据报之前,必须先调用Connect方法,且只能将数据报发送到Connect方法建立的远程主机。例如: UdpClient

9、 udpClient = new UdpClient(); /指定默认远程主机和端口号 udpClient.Connect(““, 51666); Byte sendBytes = Encoding.Unicode.GetBytes(“你好!“); /发送给默认远程主机 udpClient.Send(sendBytes, sendBytes.Length); 注意:由于这种构造函数不执行套接字绑定,因此如果希望加入多路广播组,不要使用这种构造函数。,6.2.1 UdpClient类(续),UdpClient类的常用方法和属性,6.2.1 UdpClient类(续),UdpClient类的常用方

10、法属性,6.2.2 同步发送和接收数据,编写基于UDP的应用程序时,关键在于如何实现数据的发送和接收。由于UDP不需要建立连接,因此可以在任何时候直接向网络中的任意主机发送UDP数据。在同步阻塞方式下,可以使用UdpClient对象的Send方法和Receive方法。 Send:可直接将数据发送到远程主机,并返回发送数据的长度,Send方法发送数据的类型为byte数组。 Receive:能够在指定的本地IP地址和端口上接收数据,该方法带一个引用类型的IPEndPoint实例,并将接收到的数据作为byte数组返回。,6.2.2 同步发送和接收数据(续),发送数据: (1)udpClient.Se

11、nd (Byte, Int32) Byte:指定发送的数据 Int32:发送数据的数据长度 说明:这种重载形式假定UDP客户端已经通过Connect方法指定了默认的远程主机,或者在实例化UdpClient时已经指定了远程服务器的IP和端口,UdpClient.Send (Byte, Int32, IPEndPoint) 将 UDP数据报发送到位于指定远程终结点的主机。 Byte:待发送到远程主机的数据 Int32: 待发送到远程主机的数据长度 IPEndPoint :远程主机端点,包含了应用程序连接到主 机上的服务所需的IP地址和端口信息。 说明:使用这种方法时,通过将IPEndPoint的A

12、ddress属性指 定为SocketOptionName.Broadcast,可将数据报发送到默认 广播地址255.255.255.255。,6.2.2 同步发送和接收数据(续),6.2.2 同步发送和接收数据(续),UdpClient.Send(Byte,Int32, String, Int32)将UDP数据报发送到指定的远程主机上的指定端口。 Byte:待发送到远程主机的数据 Int32:待发送到远程主机的数据长度 String:远程主机名 Int32: 端口 说明:使用这种方法时,不能用Connect建立默认远程主机,否则将引发异常。另外,如果将hostname参数值指定为 “255.2

13、55.255.255”,可将数据报发送到默认广播地址,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.Message

14、, “发送失败“); ,发送方法示例,6.2.2 同步发送和接收数据(续),UdpClient对象的Receive方法用于获取从从远程主机发送的 UDP数据报。语法形式如下: public byte Receive(ref IPEndPoint remoteEP) IPEndPoint参数:表示发送方的IP地址和端口号 返回值:为接收到的字节数组。 注意:利用此方法既可以接收指定远程主机的数据报,也可以接收所有远程主机的数据报。 如接收所有远程主机发的数据报,可用下面的代码创建: IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.An

15、y, 0); IPAddress.Any表示对方的IP地址可以是任何IP地址 0表示对方的端口号可以是任何端口号。,6.2.2 同步发送和接收数据(续),接收数据示例: UdpClient udpClient = new UdpClient(Dns.GetHostAddresses(Dns.GetHostName()0, 18001); IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); try Byte receiveBytes = udpClient.Receive(ref remoteIpEndPoint); s

16、tring receiveData = Encoding.Unicode.GetString(receiveBytes); Console.WriteLine(“接收到信息:“+receiveData); catch(Exception e ) MessageBox.Show (e.ToString(); ,6.2.2 同步发送和接收数据(续),【例6-1】利用UdpClient,编写一个网络聊天工具,程序运行效果如图7-1所示。,6.2.3 异步发送和接收数据,1发送数据 对于UdpClient对象的每个同步方法,都有与之对应的异步BeginSend和EndSend方法。 (1)利用IPEndPoint实例指定远程主机信息。 同步:Send(byte data, int length, IPEndPoint iep) 异步:BeginSend (byte data, int

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号