《2022年linux课程设计报告教学文案 .pdf》由会员分享,可在线阅读,更多相关《2022年linux课程设计报告教学文案 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、资料收集于网络,如有侵权请联系网站删除word 可编辑软件 1141Linux 操作系统结业大作业题题目:基于 UDP 多播技术的群聊服务器及其客户端要求 : 1. 运行在 Linux 系统平台上2. C 语言编程3. 基于 TCP/IP socket 编程4. 基于 UDP 多播技术5. 每一个多播组成员针对多播组全体成员发送消息并接收来自每一个多播组成员的消息,至少要求三个多播组成员。6. (尽量)使用多线程技术7. 当多个多播组成员同时发送消息时要避免冲突,保证信息的正确与不丢失。8. 第 12 周五上午 12 点以前交 (电子版发到指定邮箱)程序源码(加注释)及其运行结果截屏图。9.
2、源码及其运行结果不得与人雷同。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 资料收集于网络,如有侵权请联系网站删除word 可编辑课程报告内容及格式要求:2.1. 程序源码及其简要注释;2.2. 调试过程中出现的问题及相应解决办法;2.3. 总体运行情况与结果分析讨论2.4 上交结果:课程报告和程序源码。2.1. 程序源码及其简要注释服务器的源代码如下:#include #include #include #include #
3、include #include #include #include #include #define PORT 1234 #define MAXDATASIZE 100 #define BUFLEN 255 int main(int argc,char *argv) struct ARG *arg; struct sockaddr_in peeraddr; int sockfd,on=1; int num,i; char msgBUFLEN+1; pthread_t tid; socklen_t len; char bufMAXDATASIZE; /*要求运行时输入 ip 地址和端口号 */
4、 if(argc!=3) printf(usage:%sn,argv0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 资料收集于网络,如有侵权请联系网站删除word 可编辑exit(0); /*套接字的设置 */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd0) fprintf(stderr,socket creating error in ); exit(1); /*设置广
5、播方式 SO_BROADCAST */ setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int); memset(&peeraddr,0,sizeof(struct sockaddr_in); peeraddr.sin_family=AF_INET; if(inet_pton(AF_INET,argv1,&peeraddr.sin_addr)=0) printf(Wrong dest IP addressn); exit(0); peeraddr.sin_port=htons(atoi(argv2); len=sizeof(peerad
6、dr); /*服务器无限循环接收消息的代码*/ while(1) num = recvfrom(sockfd,buf,MAXDATASIZE,0,(struct sockaddr *)&peeraddr,&len);/ 服务器接收消息if(num0) perror(recvfrom() errorn); exit(1); bufnum=0;/ 设置字符串数组内容结束/*发送客户端传来的消息 */ sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&peeraddr,len); 名师资料总结 - - -精品资料欢迎下载 - - - - - -
7、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 资料收集于网络,如有侵权请联系网站删除word 可编辑close(sockfd); 客户端的源代码如下:#include #include #include #include #include #include #include #include #define PORT 1234 #define MAXDATASIZE 100 #define BUFLEN 255 int main(int argc,char *argv) struct soc
8、kaddr_in localaddr; int sockfd,n,num; char bufMAXDATASIZE,sendbufMAXDATASIZE; pid_t pid; char msgBUFLEN+1; /*运行客户端时输入端口号 */ if(argc!=2) printf(usage:%sn,argv0); exit(0); /*设置套接字 */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd0) fprintf(stderr,socket creating error in ); exit(1); 名师资料总结 - - -精品资料欢迎
9、下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 资料收集于网络,如有侵权请联系网站删除word 可编辑memset(&localaddr,0,sizeof(struct sockaddr_in); /*设置端口号 */ localaddr.sin_port=htons(atoi(argv1); localaddr.sin_addr.s_addr=htonl(INADDR_ANY); int opt=SO_REUSEADDR; /*设置套接字选项为SO_REUSEA
10、DDR ,让端口释放后可立即使用*/ setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt); if(bind(sockfd,(struct sockaddr *)&localaddr,sizeof(struct sockaddr_in)0) fprintf(stderr,bind error in ); exit(2); /*客户端无限循环发送消息并接收消息,当用户输入Exit 的时候退出。但是这里有一点没做好, 就是客户端必须先发送才能接收,我在使用多线程的过程中遇到了困难 */ while(1) /*提示输入消息, 5 秒后发
11、送给服务器 */ printf(send your message:(send Exit exit); scanf(%s,sendbuf); sleep(5); sendto(sockfd,sendbuf,strlen(sendbuf),0,(struct sockaddr *)&localaddr,sizeof(localaddr); socklen_t len; len=sizeof(localaddr); while(1) /*接收服务器广播的消息 */ if(num=recvfrom(sockfd,buf,MAXDATASIZE,0,(struct sockaddr *)&locala
12、ddr,&len)=-1) printf(recvfrom() errorn); exit(1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 资料收集于网络,如有侵权请联系网站删除word 可编辑bufnum=0; printf(Recive Message:%s.n,buf);sleep(2); break; /*比较用户输入的消息与 ” Exit 是否一样,一样就break退出 ” */ if(strcmp(buf,E
13、xit)=0) break; close(sockfd); 显示如下图 1:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - 资料收集于网络,如有侵权请联系网站删除word 可编辑图 1评分标准:基本完成程序,有多播概念,但编译、执行有错,有课程报告及格ii.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 资料收集于网络,如有侵权请联系网站删除word 可编辑iii.基本完成程序,有多播概念,编译通过,但执行结果有错,有课程报告中iv.v.vi.vii.较好完成程序,执行结果基本正确,有课程报告良viii.ix.圆满完成程序,执行结果完全正确,课程报告正确优x.xi.xii.xiii.源程序、执行程序和课程报告有缺者不及格名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -
限制150内