C#网络应用编程.ppt
《C#网络应用编程.ppt》由会员分享,可在线阅读,更多相关《C#网络应用编程.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1第十一章第十一章 UDP协议开发协议开发 11.1 UDP协议概述协议概述 11.2 UDP协议的套接字编程技术协议的套接字编程技术 11.3 使用使用UdpClient简化简化UDP编程编程 11.4 使用使用UDP协议进行广播和组播协议进行广播和组播 211.1 UDP协议概述协议概述 UDP协议的特点协议的特点UDP是一个简单的、面向数据报的无连接协议,提供是一个简单的、面向数据报的无连接协议,提供了快速但不一定可靠的传输服务。了快速但不一定可靠的传输服务。UDP与与TCP的比较的比较 优点优点无连接(速度快)、可用于广播(组播)、通信量无连接(速度快)、可用于广播(组播)、通信量小、
2、有消息边界小、有消息边界缺点缺点不可靠、安全性差、不保证报文顺序交付不可靠、安全性差、不保证报文顺序交付3 SendTo()方法和方法和ReceiveFrom()方法方法UDP无需建立连接,可在任何时候直接向网络中的任意主机发送无需建立连接,可在任何时候直接向网络中的任意主机发送UDP数据包。当然须指明目标地址,可以直接用数据包。当然须指明目标地址,可以直接用SendTo()方法完方法完成这个功能。将创建的套接字与本地成这个功能。将创建的套接字与本地IPEndPoint进行绑定后,也进行绑定后,也可以用可以用ReceiveFrom()方法接收远程主机发来的数据。方法接收远程主机发来的数据。使用
3、这种方法,发送和接收使用这种方法,发送和接收UDP数据包的一般步骤为:数据包的一般步骤为:1)创建一个创建一个Socket对象。对象。2)如如果果要要接接收收UDP数数据据包包,需需要要将将创创建建的的套套接接字字与与本本地地IPEndPoint进行绑定。如果仅仅为了发送,则不需要绑定。进行绑定。如果仅仅为了发送,则不需要绑定。3)使用使用SendTo()方法和方法和ReceiveFrom()方法发送和接收数据包。方法发送和接收数据包。11.2 UDP协议的套接字编程技术协议的套接字编程技术4 Send()方法和方法和Receive()方法方法 为了和某一个远程主机通信,也可以在创建套接字后,
4、为了和某一个远程主机通信,也可以在创建套接字后,使用使用Connect()方法先和远程主机建立连接,然后直接方法先和远程主机建立连接,然后直接用用Send()方法和方法和Receive()方法发送和接收数据方法发送和接收数据。由于使用的是由于使用的是UDP数据包套接字,在通信中并没有实数据包套接字,在通信中并没有实际的链路,但是际的链路,但是Connect()方法将套接字信息设置到方法将套接字信息设置到IPEndPoint对象后,对象后,Send()方法和方法和Receive()方法就可方法就可以自动使用以自动使用IPEndPoint对象的信息对象的信息。5解决解决UDP数据丢失问题数据丢失问
5、题UDPUDP不保证数据被真正传送到目的地。不保证数据被真正传送到目的地。解决方法解决方法要求远程主机返回一个应答信息,表明已经接收到发送要求远程主机返回一个应答信息,表明已经接收到发送的数据,如果在规定时间内没有收到返回的应答信息,的数据,如果在规定时间内没有收到返回的应答信息,就认为该数据包已经丢失,然后重新发送刚才发送的数就认为该数据包已经丢失,然后重新发送刚才发送的数据包。据包。实现步骤为实现步骤为1)1)向远程主机发送一条消息。向远程主机发送一条消息。2)2)等待远程主机回送应答信息。等待远程主机回送应答信息。3)3)如如果果收收到到应应答答信信息息,则则退退出出本本循循环环,继继续
6、续发发送送下下一一条条消消息息。如如果果在在规规定定时时间间内内没没有有收收到到应应答答信信息息,则重新发送。则重新发送。4)4)检检查查重重复复发发送送次次数数,如如果果达达到到规规定定的的重重复复次次数数,则终止发送,并显示相关错误信息。则终止发送,并显示相关错误信息。6程序实例一程序实例一使用使用SendTo()和和ReceiveFrom()public static void Main()int length;byte bytes=new byte1024;Socket socket=newSocket(AddressFamily.InterNetwork,SocketType.Dgr
7、am,ProtocolType.Udp);IPEndPoint myHost=new IPEndPoint(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.GetByt
8、es(str);7socket.SendTo(bytes,bytes.Length,SocketFlags.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(输入回送信息(输入回送信息(
9、bye退出):退出):);str=Console.ReadLine();bytes=System.Text.Encoding.Unicode.GetBytes(str);socket.SendTo(bytes,remoteHost);socket.Close();Console.WriteLine(对对方方已已经经byebye了了,请请按按回回车车键键结结束。束。);Console.ReadLine();8程序实例二程序实例二使用使用Send()和和Receive()public static void Main()int length;byte bytes=new byte1024;Sock
10、et socket=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,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.ReadL
11、ine();bytes=System.Text.Encoding.Unicode.GetBytes(str);9socket.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退出):退出):);st
12、r=Console.ReadLine();bytes=System.Text.Encoding.Unicode.GetBytes(str);socket.Send(bytes);socket.Close();Console.WriteLine(对方已经对方已经byebye了,请按回车键结束。了,请按回车键结束。);Console.ReadLine();10程序实例三程序实例三解决解决UDP协议数据丢失问题协议数据丢失问题 public static void Main()bool exit=false;int length;byte bytes=new byte1024;Socket sock
13、et=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);socket.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);En
14、dPoint remote=(EndPoint)iep;while(true)int retry=0;11while(true)tryConsole.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.Enc
15、oding.Unicode.GetString(bytes);Console.WriteLine(接收到信息:接收到信息:0,str);catchif(retry3)retry+;continue;elseConsole.WriteLine(发送失败!发送失败!);break;if(exit)break;socket.Close();Console.WriteLine(请按回车键结束。请按回车键结束。);Console.ReadLine();1211.3 使用使用UdpClient简化简化UDP编程编程 UdpClient的构造函数的构造函数 UdpClient()UdpClient(int
16、port)UdpClient(IPEndPoint iep)UdpClient(string remoteHost,int port)UdpClient的常用方法和属性的常用方法和属性 Send()Send()发送数据报发送数据报 Receive()Receive()接收数据报接收数据报 JoinMulticastGroupJoinMulticastGroup()()添添加加多多地地址址发发送送,用用于于连连接接一一个个多多播组播组 DropMulticastGroupDropMulticastGroup()()除除 去去 多多 地地 址址 发发 送送,用用 于于 断断 开开UdpClient
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 网络 应用 编程
限制150内