如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第3章UDP应用编程3.1UDP协议基础知识编写UDP应用程序时,有两种技术:直接使用Socket类使用UdpClient类UdpClient类对基础Socket进行了封装、发送和接收数据时不必考虑底层套接字收发时必须处理的一些细节问题,从而简化了UDP应用编程的难度,提高了编程效率。UdpClient类的构造函数1)UdpClient()创建一个新的UdpClient对象,并自动分配合适的本地IPv4地址和端口号。例如:UdpClientudpClient=newUdpClient();//指定默认远程主机和端口号udpClient.Connect("www.contoso.com",51666);Byte[]sendBytes=System.Text.Encoding.Unicode.GetBytes("你好!");//发送给默认远程主机udpClient.Send(sendBytes,sendBytes.Length);3)UdpClient(IPEndPointlocalEp)创建一个新的UdpClient实例,该实例与包含本地IP地址和端口号的IPEndPoint实例绑定。例如:IPAddressaddress=IPAddress.Parse("127.0.0.1");IPEndPointiep=newIPEndPoint(address,51666);UdpClientudpClient=newUdpClient(iep);发送数据Send方法使用哪种方式取决于以下两点:一是UdpClient是如何连接到远程端口的,二是UdpClient实例是如何创建的。1)Send(byte[]data,intlength,IPEndPointiep)这种重载形式用于知道了远程主机IP地址和端口的情况下,它有三个参数:数据、数据长度、远程IPEndPoint对象。2)Send(byte[]data,intlength,stringremoteHostName,intport)这种重载形式用于知道了远程主机名和端口号的情况下,利用Send方法直接把UDP数据报发送到远程主机。3)Send(byte[]data,intlength)这种重载形式假定UDP客户端已经通过Connect方法指定了默认的远程主机,因此,只要用Send方法指定发送的数据和数据长度即可。接收数据UdpClient对象的Receive方法能够在指定的本地IP地址和端口上接收数据,该方法带一个引用类型的IPEndPoint实例,并将接收到的数据作为byte数组返回。例如:IPEndPointremoteIpEndPoint=newIPEndPoint(IPAddress.Any,51666);UdpClientudpClient=newUdpClient(remoteIpEndPoint);IPEndPointiep=newIPEndPoint(IPAddress.Any,0);Byte[]receiveBytes=udpClient.Receive(refiep);stringreceiveData=System.Text.Encoding.Unicode.GetString(receiveBytes);Console.WriteLine("接收到信息:"+receiveData);使用UdpClient对象的Receive方法的优点是:当本机接收的数据报容量超过分配给它的缓冲区大小时,该方法能够自动调整缓冲区大小。而使用Socket对象遇到这种情况时,将会产生SocketException异常。【例3-1】UdpClient使用示例——UDP网络聊天工具UDP协议的另外一个重要用途是可以通过广播和组播实现一对多的通信模式,即可以把数据发送到一组远程主机中。利用广播实现群发功能所谓广播,就是指同时向子网中的多台计算机发送消息,并且所有子网中的计算机都可以接收到发送方发来的消息。每个广播消息包含一个特殊的IP地址。广播消息地址分为两种类型:本地广播和全球广播。通过本地广播向子网中的所有计算机发送广播消息时,其他网络不会受到本地广播的影响。在前面的学习中,我们已经知道了IP地址分为两部分,网络地址和主机地址,标准网络地址部分组成了本地网络地址的第一部分,字节地址中全部为1的部分用于主机地址部分(即十进制的255)。利用组播实现群发功能广播的通信模式虽然能够实现一对多的通信需要,但是,由于广播是向子网中的所有计算机用户发送消息,没有目的性,不但增加了网络传输负担,而且资源消耗较高。组播的出现,较好地解决了这个问题。组播也叫多路广播。所谓组播是将消息从一台计算机发送到