发布时间 : 星期六 文章linux课程设计报告更新完毕开始阅读688630df0d22590102020740be1e650e52eacff2
软件1141《Linux操作系统》结业大作业题
题目:
基于UDP多播技术的群聊服务器及其客户端
要求:
1. 运行在Linux系统平台上 2. C语言编程
3. 基于TCP/IP socket编程 4. 基于UDP多播技术
5. 每一个多播组成员针对多播组全体成员发送消息并接收来自每一个多播组成员的消息,至少要求三个多播组成员。
6. (尽量)使用多线程技术
7. 当多个多播组成员同时发送消息时要避免冲突,保证信息的正确与不丢失。
8. 第12周五上午12点以前交(电子版发到指定邮箱)程序源码(加注释)及其运行结果截屏图。 9. 源码及其运行结果不得与人雷同。
课程报告内容及格式要求:
2.1. 程序源码及其简要注释;
2.2. 调试过程中出现的问题及相应解决办法; 2.3. 总体运行情况与结果分析讨论 2.4 上交结果:课程报告和程序源码。
2.1. 程序源码及其简要注释
服务器的源代码如下: #include
#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 msg[BUFLEN+1]; pthread_t tid; socklen_t len;
char buf[MAXDATASIZE]; if(argc!=3) {
printf(\
/*要求运行时输入ip地址和端口号*/
}
exit(0);
/*套接字的设置*/
sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { }
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,argv[1],&peeraddr.sin_addr)<=0) { }
peeraddr.sin_port=htons(atoi(argv[2])); len=sizeof(peeraddr); while(1) { }
num
=
recvfrom(sockfd,buf,MAXDATASIZE,0,(struct
sockaddr
printf(\exit(0);
fprintf(stderr,\exit(1);
/*设置广播方式SO_BROADCAST */
/*服务器无限循环接收消息的代码*/
*)&peeraddr,&len);//服务器接收消息
if(num<0) { }
buf[num]='\\0';//设置字符串数组内容结束
sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&peeraddr,len);
perror(\exit(1);
/*发送客户端传来的消息*/
}
close(sockfd);
客户端的源代码如下: #include
#define MAXDATASIZE 100 #define BUFLEN 255 int main(int argc,char *argv[]) {
struct sockaddr_in localaddr; int sockfd,n,num;
char buf[MAXDATASIZE],sendbuf[MAXDATASIZE]; pid_t pid;
char msg[BUFLEN+1]; if(argc!=2) { }
sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { }
fprintf(stderr,\exit(1);
printf(\ exit(0);
/*运行客户端时输入端口号*/
/*设置套接字*/