新UDP协议下广播和多播的实现汇编

新版UDP协议下广播和多播的实现汇编摘要:UDP是一项非常实用可行的网络传输层协议,现在广泛应用于各行各业,并将在今后发挥更大的作用。本文详细阐述了Delphi5.0开发环境下广播与多播的一种实现方法。关键词:UDP协议;广播;多播;Delphi5.0中图分类号:***文献标识码:*文章编号:*-*(*)*-*-*ImplementationofBroadcastandMulticastundertheUDPProtocolZhangWei12,ZhangHuanjun1,ChengXiao2(1.ShenyangLigongUniversity,Shenyang110168,China;2.SicongCo.,Ltd.,Xian710043,China)Abstract:UDPisaverypracticalandfeasiblenetworktransmissionlayerprotocols,nowwidelyusedinmanyfieldsinthefuture,andwillplayagreaterrole.ThispaperexpoundsthedevelopmentenvironmentDelphi5.0nextBroadcastandmulticastasoftwaredesignmethod.Keywords:UDPprotocol;Broadcast;Multicast;Delphi5.0在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通讯,UDP为应用层提供了一种非常简单的服务,它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。与TCP相比UDP的优势就在于它排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,保证了运行速度。单播、广播、组播则表示的是数据在网络中“播放”的形式,是指有一个人能听到还是让特定的人群听得到,还是让所有的人都听的到的区别。一台主机要向网上的所有其他主机发送帧,这就是广播;多播处于单播和广播之间,向属于多播组的多个主机发送帧。一、广播与多播的实现下面我们就详细介绍一下Delphi5.0开发环境下广播和多播的实现。软件开发步骤如下:(一)网络初始化1.首先初始化WinSock动态连接库,创建Socket套接字,用下面语句绑定发送方Addr:Addr.sin_family:=AF_INET;Addr.sin_addr.S_addr:=INADDR_ANY;//本机接收地址设为任意地址Addr.sin_port:=htons(UDPPORT);//设定本机UDP端口号函数htons将端口号由主机字节顺序转换为网络字节顺序,然后将套接字绑定到一个本地地址和端口上(bind),设置为异步选择,设定接收端SockAddrIn:FSockAddrIn.SIn_Family:=AF_INET;FSockAddrIn.SIn_Port:=htons(UDPPORT);//接收端端口设置2.广播接口设置。广播方式有两种,一种是limitedbroadcast,广播地址是255.255.255.255;一种是directedbroadcast。limitedbroadcast初始化时代码如下:SetSockopt(FSocket,SOL_SOCKET,SO_BROADCAST,@broadcast,sizeof(broadcast));directedbroadcast不需要SetSockopt(),以标准的C类网为例,直接发送x.x.x.255就可以了。这种广播只有同一逻辑子网中的机器才能收到,也就是说对方地址应该是x.x.x.y,如果不是,即使在同一物理子网中也是收不到的。当然,这和子网掩码有关。limitedbroadcast广播的好处是只要在同一子网中的主机,就可以收到这种广播,而不必非要在统一逻辑子网中。例如,如果你的地址是x.x.x.1,那么这种广播,地址是x.y.z.a的主机也能收到。3.多播接口设置。mreq.imr_multiaddr.S_addr:=inet_addr(pchar(MY_GROUP));//设定多播地址mreq.imr_interface.S_addr:=htonl(INADDR_ANY);//设定本机接收端口。(二)网络数据的读取flen:=sizeof(FSockAddrIn);//获取字节长度FSockAddrIn.SIn_Port:=htons(UDPPORT);//设定本机接收端口Event:=WSAGetSelectEvent(Message.LParam);//接收到数据后触发消息事件ifEvent=FD_READthenbeginlen:=recvfrom(FSocket,buffer,sizeof(buffer),0,FSockAddrIn,flen);value:=copy(buffer,1,len);//网络数据接收,buffer是缓冲区。(三)网络数据的发送。首先定义一个string变量和一个integer变量,然后设置远端主机地址:FSockAddrIn.SIn_Addr.S_addr:=inet_addr(pchar(Edit1.text));value:=Content;len:=sendto(FSocket,value[1],Length(value),0,FSockAddrIn,sizeof(FSockAddrIn));//网络数据发送if(WSAGetLastError()WSAEWOULDBLOCK)and(WSAGetLastError()0)then//网络数据发送异常判断showmessage(inttostr(WSAGetLastError()));(四)关闭网络接口CloseSocket(FSocket);//关闭Socket二、结束语经测试,该软件能成功实现UDP协议下的广播和多播。测试结果如图1、图2所示。图1UDP广播测试结果图2UDP多播测试结果参考文献:[1]袁振武.谢任东.谈Delphi编程中UDP协议的应用[J].科技广场,202x,05[2]芦东昕,张华强.基于UDP的可靠数据传递技术[J].计算机工程,202x(29)

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?