资源描述:
《基于udp多播聊天室》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1设计题目基于UDP多播技术的群聊服务器及其客户端2开发环境C语言,Linux3设计要求1.运行在Linux系统平台上2.C语言编程3.基于TCP/IPsocket编程4.基于UDP多播技术5.每一个多播组成员针对多播组全体成员发送消息并接收来自每一个多播组成员的消息6.(尽量)使用多线程技术7.当多个多播组成员同时发送消息时要避免冲突,保证信息的正确与不丢失。4流程图客户端和服务器程序运行的流程图如下:其中每个客户端都是如此同服务器端进行通讯的。户数据处理客到客户数据阻塞直到接收数据应答数据请求5详细设计1.。2.关于server端的设计步骤如下:(1)初始化本地(server)的套接字
2、地址结构localaddrmemset(&localaddr,0,sizeof(structsockaddr_in));localaddr.sin_family=AF_INET;localaddr.sin_port=htons(atoi(argv[2]));localaddr.sin_addr.s_addr=htonl(INADDR_ANY);//设置端口重用intopt=SO_REUSEADDR;setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));(2)为套接字绑定本地地址协议if(bind(sockfd,(struct
3、sockaddr*)&localaddr,sizeof(localaddr))==-1){perror("[Bind()error.]");exit(1);}(3)初始化组播的套接字地址结构memset(&peeraddr,0,sizeof(structsockaddr_in));peeraddr.sin_family=AF_INET;if(inet_pton(AF_INET,argv[1],&peeraddr.sin_addr)<=0){printf("[WrongmulticastIPaddress]");exit(0);}peeraddr.sin_port=htons(atoi(
4、argv[2]));(4)sever端处理接收数据while(1){memset(msg,0,255);//printf("%s%dttttt%d",msg,a++,(strlen(msg)-1));if(read(sockfd,msg,255,0)<=0){perror("read:");exit(1);}if((strlen(msg)-1)>0){printf("[-fromClient-]%s",msg);printf("
5、--------------------------------------------------------------------
6、"
7、);if((num=sendto(sockfd,msg,3,0,(structsockaddr*)&peeraddr,sizeof(structsockaddr_in)))==-1){perror("[childprocess-----sendto]");exit(1);}}}}1.关于client端的设计步骤如下:(1)初始化本地的套接字地址结构memset(&localaddr,0,sizeof(structsockaddr_in));localaddr.sin_port=htons(atoi(argv[2]));localaddr.sin_addr.s_addr=htonl(IN
8、ADDR_ANY);(2)初始化加入组播的结构体if(inet_pton(AF_INET,"172.17.20.251",&mcaddr.imr_interface)<=0)//此处输入本机IP,为组播的结构体初始化本机ip,以加入组播{perror("[MCAddrIp---failure]");exit(0);}if(inet_pton(AF_INET,argv[1],&mcaddr.imr_multiaddr)<=0){printf("[WrongmulticastIPaddress]");exit(0);}//printf("ip:%s",inet_ntoa(mcaddr.
9、imr_multiaddr));fflush(stdout);//刷新输出缓冲区(3)加入多播组if(setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mcaddr,sizeof(structip_mreq))<0){perror("[setsockopterror---joinmulticastfailed]");exit(4);}//设置端口重用intopt=SO_R