版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、07网络工程本北4-626寝室第十一章UDP程序设计负责人:林型超:UDP协议,即拥护数据报协议(UseDatagramProtocol).是一个简单的面向数据报的传输层协议他不提供可靠性,即只把应用程序传给IP层的数据发送出去,但是并不能保证他们能到达目的广播和多播是基于UDP协议的两种消息发送机制广播数据即从一个工作站发出,局域网内的其他所有工作站都能收到它.IP协议下,多播是广播的一种变形,IP多播要求将对收发数据感兴趣的所有主机加入到一个特定的组.本章实现的程序即有广播的功能又有多播的功能,能实现基本的广播和多播机制,其主要包括如下功能.提供广播机制.能设定身份,即是广播消息发送者还是
2、接收者,默认是消息接收者.能在默认的广播地址和端口号上发送广播消息,接收广播广播消息.能指定广播地址,端口号,发送(或接收)数量选项进行广播消息的发送和接收.提供多播机制能制定身份,即是多播消息发送者好事接收者,默认是消息接收者.主机能加入一个指定多播组.能以默认选项发送多播消息.接收多播消息.能指定多播地址,本地接口地址,端口号,发送(或接收)数量和数据反还标志选项进行多播消息的发送和接收.总体设计功能模块设计1.功能模块图本程序有3大部分组成,即广播模块,多播模块部分,如图11.1所示.其中公共模块和多播模块共享的部分,包括初始化模块,参数获取模块和用户帮助模块;广播模块包括广播消息模块;
3、多播模块包括多播功能控制模块,多播消息发送模块和多播消息接收模块.图11.1功能模块图1)公共模块初始化模块.该模块主要用于初始化全局变量,为全局变量赋初始值.参数获取模块.该模块用于获取用户提供的参数,包括获取广播参数,多播参数和区分广播与多播公共参数等.用户帮助模块.该模块应于显示用户帮助,包括显示公共帮助,广播帮助和多播帮助.2)广播模块(1)广播消息发送模块.该模块用于现实在指定广播地址和端口发送指定数量的广播消息.广播消息接收模块.该模块用于现实在指定广播地址和端口接收指定数量的广播消息.3)多播模块(1)多播功能控制模块.该模块用于现实多播套接字的创建和绑定,多播地址的设定,多播数
4、据的设置,数据反还选项的设置,以及多播组的加入等.(2)多拨消息发送模块.该模块用于现实在指定多播组发送多播消息.多播消息接收模块.该模块用于现实在指定多播组接收多波消息.2.系统流程图系统流程图如图11.2所示.程序首先初始化全局变量,包括广播(多播)地址,端楼号,发送(接收)消息数量等,然后花圈用户提供的参数,并初始化Winsock初始也成功则判断是进行广播还是多播程序;如果是广播,则判断是发送者身份还是接收身份,然后根据不同的身份进行相应的处理,即发送广播消息或者接收广播消息;同样地,如果是多播,也惊醒身份的判断,然后作同样的处理.开始否成功?曰.否成功?是是否广播?是是否否发送?开始发
5、送不是获取参数设置接收广播消息发送广播消息初始化全局变初始化Winsock接收多播消息发送多播消息图11.2系统流程图3.广播消息发送流程图广播消息流程图如图11.3所示.程序首先创建UDP套接字,如果创建成功则设置广播地址;由于进行的是广播机制,所以要将套接字时针为广播类型,即SO-BROADCAST;如果套接字选想不开设置成功则可以避免向指定的广播地址广播消息了.广播结束后(即达到最多的消息条数),关闭套接字,释放占用资源.结束开始创建成功?是否设置成功?否是发送成功?是否结束还可以发关闭套接字释放占用资源是发送消息到广播地址设置套接字为广播类型设置广播地址选项创建UDP套接字输出成功信息
6、输出错误信息图11.3广播消息发送流程图结束关闭套接字释放占用资源图11.4广播消息接收流程4.广播消息接收流程图广播消息的接收流程如图11.4所示程序首先创建UDP套接字,如果创建成功则设置本地地址和广播地址,本地地址用于绑定套接字,广播地址是广播消息接收的地址.同发送广播消息一样,接收消息的套接字也要设置选项,不同的是,这里将套接字设置成可重用类型的,即SO-REUSEADDR,选项级别为SOL-SOCKET.这样一来,在相同的本地接口及端口上可以进行多次监听,即在同一台主机上,可以启动多个消息接收端来接收广播消息,如果不设置这个选项,则在同一台主机上,只能启动一个消息接收端来接收消息.套
7、接字选拔设置成功后,绑定本地地址与套接字,即可以从广播地址接收广播消息,如果接收的消息条数达到最大限制则结束程序,关闭套接字,释放占用资源.开始创建UDP套接字设置本地地址选项设置广播地址选项设置套接字为可重用类型绑定套接字和本地地址接收广播消息输出接收的消息清空缓冲区还可以接程序实现源码分析程序预处理程序预处理包括库文件的导入、头文件的加载、广播和常量定义以及广播全局变量和多播全局变量的定义。/*加载库文件*/*加载头文件*/*定义多播常量/*定义广播常量*defineB/*定义广播全局变量*定义多播全局变量*自定义函数初始化模块初始化模块用于为广播全局变量和多播全局变量赋处始值,由函数实现
8、。初始化广播全局变量/*初始化多播全局变量*/参数获取模块参数获取模块用于获取用户提供的选项,包括全局选项(即广播和多播选择选项)、广播选项和多播选项,该模块由函数实现。参数获取函数初如果参数个数小于2个初获取广播选项广播标志设置为真*如果是发送者*广播的地址*广播的端口号*广播(接收或者发送)的数量*其他情况显示用户帮助,终止程序获取/多*播选项多播标志/设*置为真如果是发送者多播地址本地接口地址多播端口号环回标志设置为真发送(接收)的数量其他情况,显示用户帮/助*,终止程序全*局用户帮助函数*广播用户帮助函数*多播用户帮助函数5广.播消息发送模块广播消息发送模块实现广播消息的发送功能,即在
9、指定广播地址和端口上发送指定数量的消息。该模块由函数来实现其实现流程可参见图该函数需要接收选项“广播地址”、“端口号”、“发送数量”,如果用户没有提供这些选项,函数将以默认值执行。/广*播消息发送函数*/设置/广*播的消息创建套接字如果/创*建失败*设置/广*播地址各个选项设置/该*套接字为广播类型如果/设*置失败循环/发*送消息延迟1秒/从广播地/址*发送消息如果发送/失*败如果发送/成*功发送/完*毕后关闭套接字、释放占用资源6广播消息接收模块广播消息接收模块实现广播消息的接收功能,既在指定广播地址和端口上接收指定数量的消息。该模块由函数来实现,其实现流程可参见图。同发送广播消息一样,该函
10、数也需要接收选项“广播地址”、“端口号”、“发送数量”,如果用户没有提供这些选项,函数将以默认值执行。需要注意的是,如果发送端不是采用默认的广播地址和端口号,则接收端也要使用相应的广播地址和端口号即通过选项来提供与发送端相同的广播地址和端口号。/*广播消息接收函数*/该地/址*用来绑定套接字该地/址*用来接收网路上广播的消息创建套接字如果/创*建失败设置/该*套接字为可重用类型*如果/设*置失败*/绑定/套*接字和地址*/如果/绑*定失败*/从广/播*地址接收消息*/延迟2秒/钟*/输出接收/到*缓冲区的消息情况缓冲/区*/接收/完*毕后关闭套接字、释放占用资源多播功能控制模块.多播功能控制模
11、块是为多播发送模块和多播接收模块服务的,它实现多播的套接创建和绑定功能、套接字选项设置功能、多播组加入功能等。该模块由函数来实现,其实现流量可参见图11。.5/*多播控制函数*/创建套接字,用于多播设置本地接口地址将套接字绑定到本地地址上如果绑定失败设置置多*播地址各个选项重新设置值设置多播数据的存在时间值。默认情况下,值是如果设置失败如果/指*定了返还选项*/设置返还置选*项为假,禁止将发送的数据返还给本地接口如果设置置失*败*置加入置多*播组*置如果置加*入不成功8、多播消息发送模块多播消息发送模块实现多播消息的发送,即发送者(需提高“-S”选项标识)在指定的多播组、端口发送指定数量的多播
12、消息,消息发送过程中还可以设置是否允许消息返还(通过“-1”设置)。该模块由函数multicastSend()来实现,其实现过程是先调用mulControl()函数实现准备工作(多播的套接创建和绑定功能、套接字选项设置功能、多播级加入功能等),然后发送指定数量的消息。与广播函数一样,该函数也需要接收选项“-h(广播地址)”、“-p(端口号)”“-i(本地接口)”、和“-n(发送数量)”,如果用户没有提供这些选项,函数将以默认值执行。/*多播消息发送函数*/voidmulticastSend()TCHARsendbufBUFSIZE;DWORDi;intret;mulControl();/*发送
13、mCount条消息*/for(i=0;imCount;i+)/*将待发送的消息写入发送缓冲区*/sprintf(sendbuf,server1:Thisisatest:%d,i);ret=sendto(socketMul,(char*)sendbuf,strlen(sendbuf),0,(structsockaddr*)&addrMul,sizeof(addrMul);/*如果发送失败*/if(ret=SOCKET_ERROR)printf(sendtofailedwith:%dn,WSAGetLastError();closesocket(sockJoin);closesocket(sock
14、etMul);WSACleanup();return;/*如果发送成功*/elseprintf(Sendmessage%dn,i);Sleep(500);/*关闭套接字、释放占用资源*/closesocket(socketMul);WSACleanup();9、多播消息接收模块多播消息接收模块实现多播消息的接收,即接收者在指定的多播级、端口接收指定数量的多播消息。该模块由函数multicastRec()来实现,其实现过程是先调用mulControl()函数实现准备工作(多播的套接创建和绑定功能、套接字选项设置功能、多播级加入功能等),然后接收指定数量的消息。该函数也需要接收选项“-h(广播地址
15、)”“-p(端口号)”“-n(发送数量)”,如果用户没有提供这些选项,函数将以默认值执行。/*多播消息接收函数*/voidmulticastRec()DWORDi;structsockaddr_infrom;TCHARrecvbufBUFSIZE;intret;intlen=sizeof(structsockaddr_in);mulControl();/*接收mCount条消息*/for(i=0;imCount;i+)/*将接收的消息写入接收缓冲区*/if(ret=recvfrom(socketMul,recvbuf,BUFSIZE,0,(structsockaddr*)&from,&len)
16、=SOCKET_ERROR)/*如果接收不成功*/printf(recvfromfailedwith:%dn,WSAGetLastError();closesocket(sockJoin);closesocket(socketMul);WSACleanup();return;/*接收成功,输出接收的消息*/recvbufret=0;printf(RECV:%sfromn,recvbuf,inet_ntoa(from.sin_addr);/*关闭套接字、释放占用资源*/closesocket(socketMul);WSACleanup();10、主函数主函数实现Winsock的初始化、广播与多播
17、的选择以及发送者与接收者身份选择等功能其实现流程可参见图11.2。/*主函数*/intmain(intargc,char*argv)WSADATAwsd;initial();GetArgments(argc,argv);/*初始化Winsock*/if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)printf(WSAStartup()failedn);return-1;/*如果是执行广播程序*/if(broadFlag)/*以发送者身份发送消息*/if(broadSendFlag)broadcastSend();return0;/*以接收者身份接收消息*/elsebro
18、adcastRec();return0;/*如果是执行多播程序*/if(multiFlag)/*以发送者身份发送消息*/if(multiSendFlag)multicastSend();return0;/*以接收者身份接收消息*/elsemulticastRec();return0;return0;提示:由于在TC或者Win-TC中没有编译套接字的头文件,所以该程序需要在VisualC+或者具有Winsock头文件的编译器中编译。本章程序已经在VisualC+6.0中通过编译。11.4.2运行结果本节将测试程序的运行,主要包括测试不带选项启动服务、以默认选项启动广播发送和接收端、以指定选项启动
19、广播发送和接收端、以默认选项启动多播发送和接收端、以默认选项启动多播接收和发送接收端。1、不带选项启动服务程序运行时,至少要带一个选项“-m”(指示多播)或“-b”(指示广播),如果没有带选项,则程序终止并显示所有的用户帮助,如图11.6所示。图11.6中,显示了全局用户帮助、广播用户帮助和多播用户帮助。11.4.2运行结果本节将测试程序的运行,主要包括测试不带悬想启动服务,以默认选项启动广播发送和接收端,以指定选项启动广播发送和接受端,以默认选项启动多播发送和接收端,以默认选项启动多播接受和发送接收端。不带选项启动服务程序运行时,至少要带一个选项“-m”(指示多播)或“-b”(指示多播),如
20、果没有带选项,则程序终止并显示所有的用户帮助,如图11.6所示。图11.6中,显示了全局用户帮助,广播用户帮助和多播用户帮助。广播测试广播测试主要包括带错误选项启动广播,以默认选项启动广播发送端接收端及以指定选项启动广播发送端和接收端。1)带错误选项启动广播如果在广播中提供了错误的选项,册程序会终止并显示广播用户帮助。如图11.7所示广播中没有提供“-a”选项,所以程序会终止并会显示广播用户帮助。2)以默认选项启动广播以默认启动广播,即广播地址是“INADDR-BROADCAST”,端口号是“5050”,发送10条信息。如图11.8所示,其中“-”表示是发送者身份。在另一台主机启动广播发送端,如图11.10所示,指定的广播地址是“202.204.53.255”(表示在“202.204.53”这个网段进行广播),端口号是“9999”,发送数量为8条。在图11.10中,显示了8条消息(消息07)。如果在另一个主机上,在全1的广播地址上(端口号仍是“9999”)接收广播消息,仍然能受到广播发送端发送的消息,如图11.12素食。3.多播测试多播测试主要包括带错误的选项启动多播,以默认选项启动多播发送端和接受收端及以指定选项启动多播发送端和接受端1)带错误选项启动多播如果在多播中提供了错误的选项,册程序会中指并显示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度年福建省高校教师资格证之高等教育心理学考前练习题及答案
- 2024年度山西省高校教师资格证之高等教育法规典型题汇编及答案
- 一年级数学计算题专项练习集锦
- 戒毒康复人员常规医疗服务工作总结
- 2024年保安人员劳务服务协议
- 自然保护区建设与管理结课论文
- 2024年回迁房屋购买协议格式
- 2024年合作伙伴合资经营协议
- 2024年学生暑假工聘任协议示例
- 物联网L1题库测试与答案2020第23部分
- 人教版《劳动教育》六上 劳动项目二《晾晒被子》教学设计
- (正式版)QC∕T 1208-2024 燃料电池发动机用氢气循环泵
- 中外合作办学规划方案
- 医学美容技术专业《中医美容技术》课程标准
- CJJ207-2013 城镇供水管网运行、维护及安全技术规程
- 六年级道德与法治期末测试卷加答案(易错题)
- 三位数除以两位数300题-整除-有标准答案
- 办公室装修工程施工方案讲义
- 医院护理人文关怀实践规范专家共识
- 中国农业银行贷后管理办法
- MOOC 陶瓷装饰·彩绘-无锡工艺职业技术学院 中国大学慕课答案
评论
0/150
提交评论