C#网络应用编程.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:26 大小:106KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C#网络应用编程.ppt

C#网络应用编程.ppt

预览

免费试读已结束,剩余 16 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十一章UDP协议开发11.1UDP协议概述SendTo()方法和ReceiveFrom()方法UDP无需建立连接,可在任何时候直接向网络中的任意主机发送UDP数据包。当然须指明目标地址,可以直接用SendTo()方法完成这个功能。将创建的套接字与本地IPEndPoint进行绑定后,也可以用ReceiveFrom()方法接收远程主机发来的数据。使用这种方法,发送和接收UDP数据包的一般步骤为:1)创建一个Socket对象。2)如果要接收UDP数据包,需要将创建的套接字与本地IPEndPoint进行绑定。如果仅仅为了发送,则不需要绑定。3)使用SendTo()方法和ReceiveFrom()方法发送和接收数据包。Send()方法和Receive()方法为了和某一个远程主机通信,也可以在创建套接字后,使用Connect()方法先和远程主机建立连接,然后直接用Send()方法和Receive()方法发送和接收数据。由于使用的是UDP数据包套接字,在通信中并没有实际的链路,但是Connect()方法将套接字信息设置到IPEndPoint对象后,Send()方法和Receive()方法就可以自动使用IPEndPoint对象的信息。解决UDP数据丢失问题UDP不保证数据被真正传送到目的地。解决方法要求远程主机返回一个应答信息,表明已经接收到发送的数据,如果在规定时间内没有收到返回的应答信息,就认为该数据包已经丢失,然后重新发送刚才发送的数据包。实现步骤为1)向远程主机发送一条消息。2)等待远程主机回送应答信息。3)如果收到应答信息,则退出本循环,继续发送下一条消息。如果在规定时间内没有收到应答信息,则重新发送。4)检查重复发送次数,如果达到规定的重复次数,则终止发送,并显示相关错误信息。程序实例一——使用SendTo()和ReceiveFrom()publicstaticvoidMain(){intlength;byte[]bytes=newbyte[1024];Socketsocket=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);IPEndPointmyHost=newIPEndPoint(IPAddress.Any,6789);socket.Bind(myHost);IPEndPointremote=newIPEndPoint(IPAddress.Parse("127.0.0.1"),6789);EndPointremoteHost=(EndPoint)remote;Console.Write("输入发送的信息:");stringstr=Console.ReadLine();bytes=System.Text.Encoding.Unicode.GetBytes(str);socket.SendTo(bytes,bytes.Length,SocketFlags.None,remoteHost);while(true){Console.WriteLine("等待接收...");length=socket.ReceiveFrom(bytes,refremoteHost);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.GetBytes(str);socket.SendTo(bytes,remoteHost);}socket.Close();Console.WriteLine("对方已经byebye了,请按回车键结束。");Console.ReadLine();}程序实例二——使用Send()和Receive()publicstaticvoidMain(){intlength;byte[]bytes=newbyte[1024];Socketsocket=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);IPEndPointmyHost=newIPEndPoint(IPAddress.Any,6789);socket.Bind(myHost);IPEndPointremote=new