C#网络编程及应用 教学课件 ppt 作者 刘瑞新 第11章 UDP协议开发

上传人:E**** 文档编号:89188436 上传时间:2019-05-21 格式:PPT 页数:26 大小:106.50KB
返回 下载 相关 举报
C#网络编程及应用 教学课件 ppt 作者 刘瑞新 第11章  UDP协议开发 _第1页
第1页 / 共26页
C#网络编程及应用 教学课件 ppt 作者 刘瑞新 第11章  UDP协议开发 _第2页
第2页 / 共26页
C#网络编程及应用 教学课件 ppt 作者 刘瑞新 第11章  UDP协议开发 _第3页
第3页 / 共26页
C#网络编程及应用 教学课件 ppt 作者 刘瑞新 第11章  UDP协议开发 _第4页
第4页 / 共26页
C#网络编程及应用 教学课件 ppt 作者 刘瑞新 第11章  UDP协议开发 _第5页
第5页 / 共26页
点击查看更多>>
资源描述

《C#网络编程及应用 教学课件 ppt 作者 刘瑞新 第11章 UDP协议开发 》由会员分享,可在线阅读,更多相关《C#网络编程及应用 教学课件 ppt 作者 刘瑞新 第11章 UDP协议开发 (26页珍藏版)》请在金锄头文库上搜索。

1、第十一章 UDP协议开发,11.1 UDP协议概述 11.2 UDP协议的套接字编程技术 11.3 使用UdpClient简化UDP编程 11.4 使用UDP协议进行广播和组播,11.1 UDP协议概述,UDP协议的特点 UDP是一个简单的、面向数据报的无连接协议,提供了快速但不一定可靠的传输服务。 UDP与TCP的比较 优点 无连接(速度快)、可用于广播(组播)、通信量小、有消息边界 缺点 不可靠、安全性差、不保证报文顺序交付, SendTo()方法和ReceiveFrom()方法 UDP无需建立连接,可在任何时候直接向网络中的任意主机发送UDP数据包。当然须指明目标地址,可以直接用Send

2、To()方法完成这个功能。将创建的套接字与本地IPEndPoint进行绑定后,也可以用ReceiveFrom()方法接收远程主机发来的数据。 使用这种方法,发送和接收UDP数据包的一般步骤为: 1) 创建一个Socket对象。 2) 如果要接收UDP数据包,需要将创建的套接字与本地IPEndPoint进行绑定。如果仅仅为了发送,则不需要绑定。 3) 使用SendTo()方法和ReceiveFrom()方法发送和接收数据包。,11.2 UDP协议的套接字编程技术, Send()方法和Receive()方法 为了和某一个远程主机通信,也可以在创建套接字后,使用Connect()方法先和远程主机建立

3、连接,然后直接用Send()方法和Receive()方法发送和接收数据 。 由于使用的是UDP数据包套接字,在通信中并没有实际的链路,但是Connect()方法将套接字信息设置到IPEndPoint对象后,Send()方法和Receive()方法就可以自动使用IPEndPoint对象的信息 。,解决UDP数据丢失问题 UDP不保证数据被真正传送到目的地。 解决方法 要求远程主机返回一个应答信息,表明已经接收到发送的数据,如果在规定时间内没有收到返回的应答信息,就认为该数据包已经丢失,然后重新发送刚才发送的数据包。 实现步骤为 1) 向远程主机发送一条消息。 2) 等待远程主机回送应答信息。 3

4、) 如果收到应答信息,则退出本循环,继续发送下一条消息。如果在规定时间内没有收到应答信息,则重新发送。 4) 检查重复发送次数,如果达到规定的重复次数,则终止发送,并显示相关错误信息。,程序实例一使用SendTo()和ReceiveFrom() public static void Main() int length;byte bytes=new byte1024; Socket socket=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); IPEndPoint myHost=new IPEndP

5、oint(IPAddress.Any,6789); socket.Bind(myHost); IPEndPoint remote=new IPEndPoint(IPAddress.Parse(“127.0.0.1“),6789); EndPoint remoteHost=(EndPoint)remote; Console.Write(“输入发送的信息:“); string str=Console.ReadLine(); bytes=System.Text.Encoding.Unicode.GetBytes(str);,socket.SendTo(bytes,bytes.Length,Socke

6、tFlags.None,remoteHost); while(true) Console.WriteLine(“等待接收.“); length=socket.ReceiveFrom(bytes,ref remoteHost); str=System.Text.Encoding.Unicode.GetString(bytes,0,length);Console.WriteLine(“接收到信息:0“,str); if(str=“bye“) break; Console.Write(“输入回送信息(bye退出):“); str=Console.ReadLine(); bytes=System.Te

7、xt.Encoding.Unicode.GetBytes(str); socket.SendTo(bytes,remoteHost); socket.Close();Console.WriteLine(“对方已经byebye了,请按回车键结束。“); Console.ReadLine();,程序实例二使用Send()和Receive() public static void Main() int length;byte bytes=new byte1024; Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Dgram

8、,ProtocolType.Udp); IPEndPoint myHost=new IPEndPoint(IPAddress.Any,6789); socket.Bind(myHost); IPEndPoint remote=new IPEndPoint(IPAddress.Parse(“127.0.0.1“),6789); socket.Connect(remote); Console.Write(“输入发送的信息:“); string str=Console.ReadLine(); bytes=System.Text.Encoding.Unicode.GetBytes(str);,sock

9、et.Send(bytes); while(true) Console.WriteLine(“等待接收.“); length=socket.Receive(bytes); str=System.Text.Encoding.Unicode.GetString(bytes,0,length); Console.WriteLine(“接收到信息:0“,str); if(str=“bye“) break; Console.Write(“输入回送信息(bye退出):“); str=Console.ReadLine(); bytes=System.Text.Encoding.Unicode.GetByte

10、s(str); socket.Send(bytes); socket.Close(); Console.WriteLine(“对方已经byebye了,请按回车键结束。“); Console.ReadLine();,程序实例三解决UDP协议数据丢失问题 public static void Main() bool exit=false;int length; byte bytes=new byte1024; Socket socket=new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp); socket

11、.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,2000); IPEndPoint myHost=new IPEndPoint(IPAddress.Any,6789); socket.Bind(myHost); IPEndPoint iep=new IPEndPoint(IPAddress.Parse(“127.0.0.1“),6789); EndPoint remote=(EndPoint)iep; while(true) int retry=0;,while(true)try Console

12、.Write(“输入发送的信息(bye退出):“); string str=Console.ReadLine(); if(str=“bye“) exit=true;break; bytes=System.Text.Encoding.Unicode.GetBytes(str); socket.SendTo(bytes,remote); socket.ReceiveFrom(bytes,ref remote); str=System.Text.Encoding.Unicode.GetString(bytes); Console.WriteLine(“接收到信息:0“,str); catch if(

13、retry3)retry+;continue; elseConsole.WriteLine(“发送失败!“);break; if(exit) break; socket.Close();Console.WriteLine(“请按回车键结束。“); Console.ReadLine();,11.3 使用UdpClient简化UDP编程, UdpClient的构造函数 UdpClient() UdpClient(int port) UdpClient(IPEndPoint iep) UdpClient(string remoteHost,int port) UdpClient的常用方法和属性 Se

14、nd() 发送数据报 Receive() 接收数据报 JoinMulticastGroup() 添加多地址发送,用于连接一个多播组 DropMulticastGroup() 除去多地址发送,用于断开UdpClient与一个多播组的连接 Close() 关闭,使用UdpClient发送数据 发送数据要调用Send()方法来实现,但是在将数据发送到远程主机后,不接受任何形式的确认。该方法返回数据的长度,可用于检查数据是否已被正确发送。 Send()方法 Send(byte data, int length, IPEndPoint iep) Send(byte data, int length, s

15、tring remoteHostName, int port) Send(byte data, int length) 使用UdpClient接收数据 Receive()方法用于在指定的本地接口和端口上接收数据,并将接收到的数据作为byte数组返回。 关闭连接 udpClient.Close();,程序实例使用UdpClient 服务器端 static void Main()StartListener();Console.ReadLine(); private static void StartListener() UdpClient server=new UdpClient(8080); I

16、PEndPoint myhost=null; try while(true)Console.WriteLine(“等待接收.“); byte bytes=server.Receive(ref myhost); string str=Encoding.Unicode.GetString(bytes,0,bytes.Length); Console.WriteLine(“接收到信息:0“,str); if(str=“byebye“) break; Console.WriteLine(“发送应答信息:你好,我也爱你!“); bytes=Encoding.Unicode.GetBytes(“你好,我也爱你!“); server.Send(bytes,bytes.Length,“127.0.0.1“,8081);server.Close(); Console.WriteLine(“对方已经byebye了,请按回车键退出。

展开阅读全文
相关资源
相关搜索

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

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