udp协议编程一.ppt
文本预览下载声明
Visual C# UDP协议编程 目标: 熟悉什么是UDP协议 掌握基于UDP协议的套接字 掌握UdpClient类的用法 什么是UDP UDP(UserDatagramProtocol)协议就是“用户数据报协议” 它是一种无连接的协议,无连接主要是和TCP协议相比较的。 开发难度 由于UDP协议并不需要进行确定的连接,所以编写基于UDP协议的应用程序比起编写基于TCP协议的应用程序要简单些 (程序中可以不需要考虑连接和一些异常的捕获工作) UDP协议的缺点 由于不提供可靠数据的传输,当计算机之间利用UDP协议传送数据的时候,发送方只管发送数据,而并不确认数据是否被对方接收。这样就会导致某些UDP协议数据包在传送的过程中丢失,尤其网络质量不令人满意的情况下,丢失数据包的现象会更严重。这就是为什么在网络上传输重要数据不采用UDP协议的原因。 UDP协议的优点 但对于那些不重要的数据,或者即使丢失若干数据包也不影响整体性的数据,如音频数据,视频数据等,采用UDP协议就是一个非常不错的选择 。 如目前网络流行的很多即时聊天程序,如OICQ和ICQ等,采用的就是UDP协议。同时虽然UDP协议无法保证数据可靠性,但具有对网络资源开销较小,数据处理速度快的优点,所以在有些对数据安全性要求不是很高的情况下,采用UDP协议也是一个非常不错的选择。 用套接字实现基于UDP协议的通信 由于UDP是一种无连接的协议.因此,为了使服务器应用能够发送和接收UDP数据包,程序员必须处理两件事: 1、创建一个Socket对象 2、将创建的套接字对象与本地IPEndPoint进行绑定(对于不需要在指定UDP端口上接收UDP数据包的客户机,不需要执行该步骤) 完成上述两个步骤后,所创建的套接字就能够在IPEndPoint上接收流入的UDP数据包,或者将流出的UDP数据包发送到网络中任意其他设备上. 创建基于UDP的套接字 serverSocket=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); IPEndPoint IPEP=new IPEndPoint(IPAddress.Parse(127.0.0.1),5566); serverSocket.Bind(IPEP); 在UDP通信中,Socket套节字使用SendTo()和ReceiveFrom()方法来发送和接收数据 int SendTo(byte[] data, EndPoint Remote); 发送一个字节数据到由不同的Remote所指定的EndPoint上. int ReceiveFrom(byte[] data, ref EndPoint Remote); 其中,第二个参数不是一个EndPoint 对象,而是一个EndPoint 的引用,该方法将从远程设备中将EndPoint 信息放置到参数所表示的EndPoint 对象的内存中. 实现基于UDP的聊天室 说明:与UDP进行通信的远程设备通信必须对发送数据和接收数据一致.如果客户机和服务器同时等待接收数据,两个设备都将处于阻塞状态.为了达成这个协议,服务器和客户机之间遵循下列规则: 发送问好消息 接收欢迎消息 发送消息 接收问好消息 发送欢迎消息 发送消息 客户端 服务器端 UdpClient类 UdpClient类能够简化网络程序员的UDP网络程序设计工作 UdpClient类的构造函数 UdpClient():创建一个没有与任何指定的地址或端口绑定的新UdpClient实例 UdpClient(int port):创建一个新UdpClient实例与指定的UDP端口进行绑定 UdpClient(IPEndPoint iep):创建一个新UdpClient实例与指定的本地IP地址和端口进行绑定 UdpClient(string host,int port):创建一个新UdpClient实例与任意IP地址和端口进行绑定,并将它与指定的远程IP地址和端口进行联合 UdpClient 方法 (1)当UDP客户端知道远程计算机IP地址: Send方法的调用语法如下: public int Send ( byte[] dgram , int bytes , IPEndPoint endPoint ) ;参数说明: dgram 要发送的 UDP数据文报(以字节数组表示)。 bytes 数据文报中的字节数。 endPoint 一个 IPEndPoint,它表示要将数据文报发送到的主机和端口。 返回值 已发送的字节数。 UdpClient发送UDP数据包例子 IPAddress HostI
显示全部