下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、季徵研技冬院本科生毕业论文(设计)题目:基于C的短信收发系统的设计与实现姓名:秦正阳学 院:数理信息与工程专 业:计算机科学与技术班 级:11级计算机4班学 号:1881110415指导教师:刘斌 职称:副教授2015 年5月4 日安徽科技学院教务处制摘要 1关键词 1引言 11 系统概述 11.1 研究系统的目的和意义 11.2 国内外研究状况 21.3 应用前景 22 系统知识简介 22.1 GMS协议介绍 22.2 TCPsocket 编程模式 32.3 多线程编程的介绍 42.4 开发工具 53 短息收发系统分析 53.1 需求分析 53.2 可行性分析 53.2.1 技术可行性 53
2、.2.2 经济可行性 53.2.3 操作可行性 64 系统的设计和图分析 64.1 保存信息的内容 64.2 一级和二级服务器端 64.3 client 端 64.4 系统的总体设计 75 系统的实现和代码分析 85.1 一级server 85.2 二级server 95.3 client 端 116 . 系统测试 176.1 测试的目的及意义 176.2 一级服务器的性能测试 176.3 二级服务器的性能测试 186.4 本系统测试的总结 187 开发总结 18致谢 18参考文献 19英文摘要 20o基于C的短信收发系统的设计与实现计算机科学与技术专业指导教师秦正阳刘斌摘要:本短信收发系统是
3、基于 Linux下c语言,多线程,GMSS信协、议,select非阻塞方式, 采用TCP的连接和传输方式和网络编程来实现的。我要做的就是模拟手机短息的形式来实现短信的收发,一个总服务器去管理多个二级服务去,然后二级服务器去管理多个客户端,通过设计二层服务器的形式来实现服务器的负载均衡,这样同号码段的号码就可以通过所在号码段的二级服务器实现客户端的短信的收发,不同号码段的信息要通过一级服务器进行转发实现客户端的信息收发,通过这个系统的实现可以把以前所学的知识联系起来,得到巩固和自己编程能力的提升。嘲箱闰属侈瘗睐板尻赖。 关键词:c/s;短信收发;多级服务器;负载均衡 ;多线程.“»WQ
4、IWMMaClliOMMIMmNBYBIIIIilMMUppMgfr 随着网络的普及,人类生活越来越依赖网络,人与人之间的交流也越多的在网络上进行。由于交流的实时性,即时通讯系统也被越来越多的人所使用。即时通讯系统除了普通的生活上的交流,也在商业交流中越来越受到重视,它可以是个很好的与客户之间即时交流的平台,在时间上它要比电子邮件更加具有实时性, 而费用相对电话交流也要经济的多。在这种环境下,聊天软件作为一种即时通讯工具,得到了很好的发展。因此,设计开发一个可以灵活用于网站,论坛,公司或企业内部交流的聊天工具很有必要。残鹫楼静铸腌翻遮藏随着网络的的发展,网络上出现了各式各样的聊天工具,有国外的
5、也有国内的,但是他们的用途都一样,都是用来通信。纵观网络聊天工具的发展,市面上用的做多的莫过于QQ MSN YY微信等聊天工具,这些聊天工具针对不同的人 群有不同的选择,大多数的人用 QQ微信进行聊天、发心情、写日志、发说说、 图片等;工作上的人大多数使用 MSN这是国外的聊天工具,它不像 QQ那样能 够轻易得到别人的信息,从而带来骚扰,MS业须使用邮件进行聊天,用它也显示其专业性;像YY这样的聊天工具,有玩游戏的在使用,有网络教学的在使用, 群体不限,根据自己的爱好可以随意选取。还有基于网页的聊天工具,如新浪网聊天室、网易聊天室等。如新浪网聊天室,该网站为不同年龄、不同职业、不同地区、 不同
6、爱好的网友量身定制了数百个不同主题的 “房间” 。 以新浪聊天室看,聊天室呈现积聚人气的作用,并开设不同主题的聊天室以使网名具有针对性的使用聊天室。针对不同年龄层开设的额 “同龄话题”使各年龄层次的用户话题和选择自己聊天对象群体,找到自己合适的聊天话题,并且针对目前社会流行的热门话题和流行话题都有相应的主题室。r钢极飘镇桧猪锥。在网络发展日益成熟的今天,各式各样的网络聊天工具已经展现在我们的眼前。 他们之间都是大同小异,实现的功能各不相同;有些聊天工具只是实现聊天通讯,传输文件等简单的功能,而有些聊天工具做的非常全面,还有这视频,语音, 以及娱乐性的游戏等功能1。 说到QQ, 应该没有人不知道
7、吧?它是腾讯出台的一款聊天工具,这也是在国内出现的比较早的聊天工具,历经十几年的发展,已经发展到几亿用户的规模。它实现的功能非常多,有语音、视频、文件、应用等功能。 其最主要的就是应用功能,这些应用不仅给用户带来了乐趣,而且也给 自身带来了巨大的利润,腾讯在 QQ的应用中添加广告、设置需购买的道具等来 获取利益。价钱看似比较低,但是由于用户的基数庞大,每年的利润也非常高。这样的聊天工具在开发技术上已经没有什么难题,并且具有广泛的应用和市场空 间。弹贸摄尔霁毙揽砖卤尻。2系统知识简介应用了 GMS*议的结构体中包含了信息当中许多重要的信息, 如下面的结构 体所介绍的信息,我也应用了 GMSJ息协
8、议来填充自己数据结构,其中我的短信 收发用到的数据就给其赋上自己需要的值2。邠戢箧翻翱:类蒋番存放信息的结构体,主要存放信息的发送时间,信息的长度和具体的信息。typedef struct data char time30;/ 信息发送的时间int count;/ 信息的长度char message160; / 信息体data;发送信息的信息头部,存放一些重要的信息和进行信息验证的机制。typedef struct submit_head unsigned char sca_len;/ 短信息中心的地址长度unsigned char sca_type;/ 短信息中心号码类型unsigned c
9、har sca_add11;/ 短信息中心号码unsigned char file_tou; / 文件头字节unsigned char pdu_type;/PDU 类型unsigned char da_len;/接受方地址长度unsigned char da_type;/接受方地址类型unsigned char da_add11;/ 接受方地址协议标示数据编码方案信息有效期/用户数据长度unsigned char pid;/ unsigned char dcs;/ unsigned char vp;/ unsigned char udl;submit_head;接收信息的信息头部,也是存放一些
10、重要的信息。typedef struct deliver_headunsigned char sca_len;/服务中心的地址长度unsigned char sca_type;/ 月艮务中心类型 unsigned char sca_add11;/服务中心地址unsigned char pdu_type;/PDU 类型 unsigned char oa_len;/发送方地址长度unsigned char oa_type;/发送方地址类型unsigned char oa_add11;/发送方地址unsigned char pid;/协议标志unsigned char dcs;/数据细鸣方案iuns
11、igned char stcs7;/服务中心时间戳unsigned char udl; /用户数据长度deliver_head;发送信的一个完整的结构体。typedef struct submitsubmit_head sub_head;/ 发送协议头结构体变量data user_data; /用户数据结构体变量submit;接收信息的一个完整的结构体。typedef struct deliver一deliver_head delv_head;/接受结构体头变量data user_data; /用户数据结构体变量deliver;TCP是一种面向连接(连接导向)的、可靠的、基于字节流的 运输层(
12、Transport layer )通信协议,由 IETF 的 RFC 793说明(specified ) 3。在 简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UD比同一层内另一个重要的传输协议。TCP建立连接之后,通信双方都同时可以进行数据 的传输,其次,他是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。 厦礴恳蹒骈畤翥继骚。如下图1基于TCP的客户/服务器模型的socket工作流程图4。TCP服务端:客户端:9Socket ()一直阻塞客户端连接到达Connect ()建立连接I(tcp三次握手)4Recv ()Send ()服务请求处理请求Recv ()对于一个程
13、序来说我们可以把它分成若干个独立执行的执行流,我们把这种称之为线程,线程可以提供多任务的处理能力5。在现在的大型编程中普遍使用 多线程和多进程,应用多线程是为了更好的设计程序和编写和测试程序,这样一 个线程来实现一个独立的功能,增加程序的可执行性。我们在使用多线程编程, 要熟练的掌握线程之间的通信和同步等问题,还要了解每个线程的优先级,这样才能很好使用多线程来解决实际的问题。茕桢广啊选块网糊目。启动一个线程要用到 pthread_create(&tid,NULL,pthread_func,NULL) 函数来 实现,tid是线程号,每个线程5有一个独立的线程号,-pthread_func
14、()是线程 要调用的线程函数;鹅娅尽揖鹤惨魔茏(。在多线程的使中要用到 pthread_join()来等待要结束的线程,来确保线程能 顺禾I执行完成6 0麓丛妈翅为瞻债蛭练私在多线程访问临界资源时,要使用到互斥所进行加锁,用到 pthread_mutex_init()来初始化一个锁,pthread_mutex_lock()来对临界资源来 进行加锁,pthread_nutex_unlock 来对加锁的资源解锁,最后还要用到 pthread_mutex_destory()来对锁的销毁和资源的释放。在访问临界资源时为了 提高系统的处理效率要使用到条件锁和信号量来辅助完成,条件锁 pthreah_co
15、nt_wait() 7 0 3tm圣僮1t龈讶骅汆。(1)开发语言:本短信收发系统主要应用了 C语言进行开发的,应用的是linux 下C语言和脚本语言shell来共同完成的。其中主要应用到的知识是Linux下的 网络编程应用TCP进行连接的,采用了多线程的编程思想和最后用到脚本语言 shell来对运行步骤进行优化。渗彩呛俨匀谓鳖调砚金帛。(2)开发硬件平台:一部有redhat虚拟机的windows系统的个人pc。(3)开发软件平台:Redhat enterprise linux 5,编译器vim,调试器gdb, 网络配置ifconfig , route等等。钱卧泻嵯圣骋睨圆Client端需求,
16、本短信收发系统是基于linux C来实现的,其中客户端的需 求是:client端可以实现同号码段的client端进行通信,还可以和不同号码段 的client进行通信。在发送信息是可以选择发送和不发送,发送的保存在finish.txt 里,不发送的保存在staff.txt 里,接收到的信息保存在recv.txt 里,并且client端还可以对这些信息进行查看。施凤袜备鄱®轮烂蔷。Sonsever需求,二级服务器需要可以实现同号码段client信息的转发,当收到不是自己号码段的client信息时,需要把信息转发给一级服务器,然后通 过一级服务把信息转发给client所在的二级服务器,这样
17、来实现不同号码段client端的信息之间的交互Fatherserver需求,一级服务可以让多个不同号码段的二级服务器连接,来解决负载均衡,并且还要处理来自二级服务器的消息,转发给对应的二级服务器来实现信息的交互。 坛搏乡it忏篓锲铃io短3.2.1 技术可行性本系统是基于linux C语言下来实现短信的收发,其中主要应用到了网络编 程TCP进行连接,还有 GSM短信协议来实现短信的正确收发,当每连接一个 client端时就启用一个线程来服务这个 client ,最后使用脚本shell来优化后 面 的运行步骤。 蜡燮夥寤朝长铉锚金市赘。3.2.2 经济可行性经济可行性是对经济能力和投资能力, 后
18、期的维护运维费用的估算,对系统 的经济效益进行估算,本短信收发系统是免费提供给用户的, 因为市面上有不少 收费的聊天软件,可以减少用户的使用费用来增加用户的使用黏性。 而辅昙JW遥 闫撷凄。3.2.3 操作可行性本系统在使用时需要在linux系统中开一个终端来连接自己号码所在的二级 服务上,因为时间的缘故并没有对界面进行优化, 在操作上可能没有那么的简洁 和方便。铺鹏踪韦辕耀。4系统的设计和图分析图2信息体图如图2所示是保存信息的结构体,信息中包含发送者的号码,发送的时间 和短信的具体内容。图3二级服务器模拟图如图3所示是两个服务器的示意图(一级和二级server), 一级服务器和二级服务之间
19、采用的是TCP连接,TCP是面向连接的可靠的传输9,确保信息能够准确无误的传输给接收者,当每一个二级服务器连接一级服务器时,一级服务器多会开辟一个线程去服务二级服务器,并且用数组存放二级服务器连接时返回的fd和二级服务器所代表的号码段,这可以确保信息所对应的的服务器并且能够让信息正确的转发。H顾震彦决绥I1饴3E锦。Client功能:如图4所示client所实现的功能,客户端连接二级服务器也是采用了 TCP!接, 和服务器的连接原理是一样的,客户可以实现信息的查询,可以查询收信箱,发信箱和草稿箱等功能。猫至I!绘燎的朱髅既尻。图5系统工作流程图如图5所示是系统大致的框架和功能示意图。当 cli
20、ent发送一个信息时就 会提示是否发送,发送就会保存在发信箱中如果不发送就保存在草稿箱子中。Client把信息发给自己号码所在的二级服务器时,二级服务器就会检查要发送 至的号码是否是自己管理的号码段,如果是自己就把信息转发给本号码段的 client ,如果不是自己号码段的client就把信息转发给一级服务器让一级服务 器进行处理,一级服务器收到信息时就会检查信息的号码在哪个二级服务器所管 理的号码段,然后把信息转发给对应的二级服务器,最后二级服务器把信息转发 给对应的client ,当client端收到信息时就会打印出信息的内容并把信息保存 在收信箱中。辄峰隔槿跳空翱a虢荥。5系统的实现和代码
21、分析rootlocalhcstz/rnnt/hgts/llnux/bishe/biyeshejiFile Edit View Terminal Tabs Helprootlocalhost biyeshej1# ,/fatherser 4444 *welcome to father server*server get son server server get son server server get son serverconnection from number ; 130connection fromnumber : 131connection fromnumber : 132127,
22、e.641 port12740.0.1 port127.9.9,1176153577336®2g图6 一级服务器运行图如图6所示是一级服务器的运行结果。每连接一个二级服务器多会返回一个 fd和它所对应的号码段,然后把这些数据保存在一个数组里面,供后面信息的匹配和查询。尧侧野!绛解旬融盛tclient.fd = cfd;strcpy(client.num,buf);client.address = all_address;all_addressgeshu.fd = cfd;strcpy(all_addressgeshu.num,buf);每连接一个二级服务器多会创建一个线程去服务它,并
23、且要把连接上二级服务器数加1,和线程数匹配起来。send(cfd,"hello sonser”,13,0);pthread_create(&client.tid,NULL,fun,(void *)&client);凄。识镰金昆缢螺竟嗜俨geshu +;这是处理来自二级服务器的转发请求,通多号码段的匹配吧信息转发给对应的二级服务器上,实现信息的交互。for(i = 0;i < geshu;i+)if(0 =strncmp(send_msg.delv_head.oa_add,client.addressi.num,3)濂 it 饿劳月鼠错痫女帚胫汆。send(cli
24、ent.addressi.fd,&send_msg,sizeof(send_msg),0);胧、鹄灭萦欢蜴鹫金帛。| rooWlotailioatz/mnt/ hgfs/lin口回区jFile Edit View lerminal Tabs Helproot0localhost blyeshej1# ./sonser 127.0.O.1 4444 130 5 127.0-0*Irecv fro打 server hello sonser* *welcoine to son server* * * -*-* * son&er get connection from 127.0.0.
25、1 port 46226 client number : 13011sonser get connection from 127*0.9,1 port 46482client number : 13012 *Tsend to 13612 clieant from 13011 client siccess*send to 13011 client rrom 13111 client siccess* 图7二级服务器运行图如图7所示,连接了两个来自130号码段的client端,分别是13011和 13012client 。二级服务器需要绑定两个socket进行通信,一个是和一级服务器进行通信, 另
26、一个是和client端进行通信。下面的就是绑定了服务的地址,实现和服务器 进行信息的交互10。鲨警新出趣甲沏瞿统箪SPORT = atoi(argv2);strcpy(num,argv3);sfd = socket(AF_INET,SOCK_STREAM,0);if(-1 = sfd)printf("socket create failn");close(myfd);return -1;下面的代码主要是绑定自己的地址用于和client端之间的通信,首先要确定协议类型AF_INET是TCP然后绑定自己的端口号和 IP地址,最后用 ACCEPT)函数阻塞 在那里等待着clien
27、t 端的连接,经过三次握手后就可以进行通信了。硕痍翔顽诒撵旭seraddr.sin_family = AF_INET;seraddr.sin_port = htons(SPORT);seraddr.sin_addr.s_addr = inet_addr(argv1);bzero(&(seraddr.sin_zero),8);SPORT = atoi(argv4);myfd = socket(AF_INET,SOCK_STREAM,0);if(-1 = myfd)printf("socket create failn");return -1;myaddr.sin_fa
28、mily = AF_INET;myaddr.sin_port = htons(SPORT);myaddr.sin_addr.s_addr = inet_addr(argv1);bzero(&(myaddr.sin_zero),8);ssize = sinsize = sizeof(struct sockaddr);n = bind(myfd,(struct sockaddr *)&myaddr,ssize) ;下面的代码主要是处理在同一号码段的client 之间的信息来玩,通过前面保存他们fd和号码的数组进行号码的匹配来找到对应的client ,然后把信息发送过去。当用户不在数
29、组里的时候,信息就会自动的丢弃了,并提示找不到用户。阕擞榭迁择植秘豫if(0 = strncmp(num,send_msg.delv_head.oa_add,3) for(i = 0;i < geshu; i +) if(0 =strcmp(one_cli.pclii.num,send_msg.delv_head.oa_add)氨噜蟒富贸恳弹演颔聚。一 一 一 一char ss11;strcpy(ss,send_msg.delv_head.oa_add);strcpy(send_msg.user_data.time,send_msg.user_data.time);数循资赢 in# 孙滋
30、御赘。strcpy(send_msg.user_data.message,send_msg.user_data.message); 怂阐官爵t迳醇啸重晨凉。strcpy(send_msg.delv_head.oa_add,one_cli.num);send(one_cli.pclii.fd,&send_msg,sizeof(deliver),0);谚辞担谄动律泻printf("n*send to %s clieant from %s clientsiccess*n",ss,send_msg.delv_head.oa_add);啜觐言圭缘锡嗫俱触铃铸。break;el
31、se if( i = geshu)printf("can not findn");图8转化二级服务器运行图如图8所示的是所要转发的 client不在本二级服务器的管理之内, 需要把信息转发给一 级服务器,然后通过一级服务器把信息转发给对应的二级服务器,最后二级服务器把信息转发给对应的client端。受绐辎檄库。msg one_scli;strncpy(one_scli.num,send_msg.delv_head.oa_add,3);printf("n*zhuan fa to %s server *n",one_scli.num);患耳渍蟆俾阅剜鲫膏!藏
32、。send(sfd,&send_msg,sizeof(deliver),0);root®locarhO5t:/mnVhgT5/hnux/bfshe/l£|eshejlFile Edit View Terminat Tabs Help w*,*:/卷*漳 苇*卓*r * * * 4 » * :- * * * *message send and receive* * " " * * * * *1.edit message* 2.receive message* 3.finish message* 4.staff message,* 5.ex
33、it message*,*r *,*please enter 1-5 :1*写end message*please enter to num: 13G12please enter msg: zaigamna shi fou send (y/n): y *3|*京* *5£口弓 sue cgss * *图9客户端运行图如图9所示是client端登陆和发送信息的界面,其中可以实现信息的编辑和发送,在发送的时候会提示用户是否发送,发送的话就会保存在发信箱中,如果选择不发送的话就会保存在草稿箱。并且还提供信息的查询,可以查询收信箱, 发信箱和草稿箱的信息。封忧蒋氯建匿强I悯鹫。switch(
34、choice)case 1:printf("*send message*n");memset(&send_msg,0,sizeof(submit);fflush(stdin);printf("please enter to num:");scanf("%s”,cli_num);printf("please enter msg:");scanf("%s”,cli_msg);printf("shi fou send (y/n):");scanf("%s",ch);if(s
35、trcmp(ch,"y") = 0)submit_init(&send_msg,cli_num,cli_msg);send(cfd,&send_msg,sizeof(submit),0);finsh_save_(cli_num,cli_msg,argv5);printf("*send success*n"); if(0 = strcmp(cli_msg,"quit").break;else if(strcmp(ch,"n") = 0)staff_save_(cli_num,cli_msg,argv6
36、);printf("*message save*n");break;case 2:printf("n*receivemessage*nn");颖刍堇蚊悖亿顿裳赔洸。recv_print_(argv4); break;case 3:printf("n*finishmessage*nn");港避finsh_print_(argv5); break;case 4:printf("n*staffmessage*nn");staff_print_(argv6);break;case 5:return;default:cont
37、inue;图io客户端运行图如图10所示是在client端发送信息时提示用户是否发送信息,不发送的话系统就会调用staff_save_(cli_num,cli_msg,argv6)函数把信息保存在草稿箱当中。挤明电爰结疑晴哓类。图11客户端接收信息图如图11所示是client端接收到信息,此时系统会申请空间来储存这些信息 其中调用deliver_print(&recv_msg) 函数,把接收到的信息打印到终端上去, 再调用函数recv_save_(&recv_msg,argv4)来吧接收到的信息保存到收信箱当中去,方便用户的查询和翻阅。赔旗申谄觎聚辽招末金卷。MSG *buf
38、= NULL;MSG *head = NULL;buf = (MSG *)malloc(sizeof(MSG);memset(&recv_msg,0,sizeof(deliver);n = read(cfd,&recv_msg,sizeof(deliver);deliver_print(&recv_msg);recv_save_(&recv_msg,argv4);/buf = msg_tral(&recv_msg,buf);/head = msg_read();/head = msg_insert(head,buf);free(buf);buf = NU
39、LL;图12客户端发送信息图如图12所示是夸号码段发送信息的,是131号码段的client端,发送给130 号码的client ,它需要经过131二级服务器转发给一级服务器,然后一级服务 器再把信息转发给130这个二级服务器,最后130这个二级服务器把信息转发给 130对应的客户端,这是信息转发的一个具体流程。方碾麓信决穗赛金卜册13111client send ()函数把信息发给131二级服务器。send(cfd,&send_msg,sizeof(submit),0); 裳檬祕 颤谚剑芈蔺。131二级服务器疝过号码的匹配没有找到13011的client端,就把信息转发个一级服务器,让
40、一级服务器处理。仓嫄黯世嘱珑需睁嘴。msg one_scli;strncpy(one_scli.num,send_msg.delv_head.oa_add,3);printf("n*zhuan fa to %s server *n",one_scli.num);绽离琏顿娱 wj蛭蠲络淆鼠send(sfd,&one_scli,sizeof(msg),0);send(sfd,&send_msg,sizeof(deliver),0);一级服务器接收到信息就会进行匹配,然后找到13011client所在的130的二级服务器,然后就把信息转发给 130这个二级服务器。
41、骁顾烽果琉意翰memset(&send_msg,0,sizeof(send_msg);n = recv(client.fd,&send_msg,sizeof(send_msg),0);if(n <= 0)printf("sonser %s exitn",client.num);return ;for(i = 0;i < geshu;i+)if(0 =strncmp(send_msg.delv_head.oa_add,client.addressi.num,3)针煤暧障银编send(client.addressi.fd,&send_msg,
42、sizeof(send_msg),0);金留诗浬艳损楼期覆觞类乳130二级服务器接收到一级服务器的信息时,就会通过号码的匹配吧信息发给13011这个客户端,实现了夸号码段转发。栉缎欧锄种it瑶镂。deliver send_msg;int i;n = recv(sfd,&send_msg,sizeof(deliver),0);for(i = 0;i < geshu; i +)if(0 = strcmp(all_clii.num,send_msg.delv_head.oa_add)辔惮楝刚殓st瑶丽阉应。char ss11;strcpy(ss,send_msg.delv_head.o
43、a_add);strcpy(send_msg.user_data.time,send_msg.user_data.time);strcpy(send_msg.user_data.message,send_msg.user_data.message); 崛扬 斓滇淌辐浸兴涣蔺。strcpy(send_msg.delv_head.oa_add,send_msg.delv_head.sca_add);爵叁搪言内烬忧毁厉鹫。send(all_clii.fd,&send_msg,sizeof(deliver),0);printf("n*send to %s client from %s
44、 clientsiccess*n",ss,send_msg.delv_head.oa_add);则觎惬靠痪贾晖园栋洸。break;图13收信息运行图如图13所示是查看收信箱的信息,其中调用了 recv_print_(argv4) 函数 把储存在文件中的短信信息多打印在终端上,可以显示短弓的投送者号码和发送 时间和具体的短信内容。胀鳗弹奥秘打挛钮聪。void recv_print_() 一 一i nt i = 0;i nt j;MESSAGE arr_msg100;FILE *fp = NULL;i nt leng;char chose;f p = fopen("./mess
45、age/recv.txt","a+");i f(NULL = fp)printf("open recv.txt fail !");return ;while(1)memset(&arr_msgi,0,sizeof(MESSAGE);fread(&arr_msgi,sizeof(MESSAGE),1,fp);i+;if(feof(fp) break;f or(j = 0;j<i-1;j+)leng = j + 1; fflush(stdout); printf("%dn",leng)鳏jw收祷和诵帮废捕减
46、。printf("num: %sntime: %smessage: %sn",arr_msgj.num,arr _msgj.time,arr_msgj.message);禀虚媛赈维跻脓扩 枭。printf("ENDn",j);境鞋ft烧呜旧指6.系统测试测试的目的就是为了是寻找程序中的错误, 而且是尽可能的去找出程序中的 尽可能多错误110程序员写的一个程序并非是写完就是完美的,未免会存在某些 规避不了错误。如果程序员不能及时的将这些错误找出来并修改,有可能会造成 系统无法正常工作造成一些损失。短信收发系统中一旦出了错误系统将无法运 行,对人们的正常通信
47、将带来一些麻烦。 所以要通过测试,尽量的减少程序中的 错误,从而达到系统稳定运作的目的,使短信收发系统工作不会收到影响。涉氯唠麓蔑SH!描谓鹰。图14 一级服务器测试图如图14所示是测试一级服务器的最大的负载量,连了十几个二级服务进行测试,看在 多个二级服务器连接时一级服务器是否能正常的工作,经过测试一级服务还是可以顺利的实现信息的转发的。 钢均虞荣产涛困蔺。File Edu View jerminai labs Helpruotelocalhost blyesheji# ./sonser 127.0.0.1 5555 130 6666127.0-D.Irecv from server hel
48、lo sonser亭*.*wmlc101111g. to son server*3*sonser clientget cannection number : 13911f ram127.0.C,1port168眶sonserclientget connection nuinDer : 13012fromiport17664soinserclientget connection numeer : 13913from127.e.e.iport17326sonser clientget connection numbs r : 13014from127.0.0.1port17576sonser cl
49、ientget connection number : 13015from127.6.0.1port17832somser clientget connection number : 13916from127.9.0.1port1B088SQiiser clientget connection mi砸”:13317from127.0.0.1port10942sanserclientget connection rtumcer : 1391Afrom127.9.0.1port26190sonserclientget connection ftumtoer t 13919from127.0.0.1
50、port204545oni5er clientget connee tian number : 130ilOf rami127.3.0.1port207 ie图15二级服务器测试图如图15所示是大量的client端连接到二级服务器上的,然后在测试二级服 务器能否把信息的传递,在测试的过程中由于电脑性能的缘故, 在信息发送的时 候会出现一些的卡顿,但是信息还是可以正常的发送的。 瞰情悔触乐鹏烬律唾通过如上的测试,可以实现负载均衡,这种方式可以能让更多的client进行连接,通过二级服务器来降低一级服务器的负载,同时也提高了信息的转发效率了性能。另一方面测试可以检测出系统中的一些bug,有些bug
51、只有通过大量的重复测试才可以显示出来的,然后在解掉bug,优化系统的功能,让用户能够有更好的用户体验。 粉包兖争音微船癞别激7开发总结经过几个月终于把自己的系统完成了和毕业论文完成,顿时感觉自己轻松了许多,但是另一方面也有一点不舍,因为毕业完成了说明我们离毕业的步伐又近 了 一步,但是也是我们人生的另一个起点。 在这几个月当中多是利用晚上的时间 去编写程序的,在编写程序的过程中也遇到很多的苦难,用对一些知识还不是很熟,用起来会出现一些错误,但是最终通过网络,通过指导老师还是把这些问题 给解决了。在此过程中对以前的许多知识得到了很好的巩固和复习,还有系统中禺铉伸号欤谦鹃饺竞荡赚。应用到的一些新知识,自己通过网络去学然后去应用。因为自己知识体系还不是 特别的完整,编程能力也没有特别的强,所以系统并没有那么的完善,所以在以 后的工作中还是要继续的学习,提升自己的编程能力和分析问题的能力。莹谐龌新赏组n绐殿减。致谢光阴似箭,日月如梭。转眼间大学的四年就要结束了,能让我的大学画上完 美的句号和毕业答辩能够取得圆满的成功。我要感谢多年培育我的老师们和指导我毕设完成的指导老师,因为在写毕设的这段时间我一直在外地实习, 学校有什 么事刘斌老师多会第一时间的通知我,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年色彩色相教案
- 崇阳县2024年湖北咸宁崇阳县事业单位招聘工作人员97人(含医疗岗45人)笔试历年参考题库典型考点附带答案详解
- 如东县2025江苏南通市如东县事业单位招聘104人笔试历年参考题库典型考点附带答案详解
- 天津市2025天津中德应用技术大学博士学位或高级专业技术职务岗位人员招聘38人笔试历年参考题库典型考点附带答案详解
- 大庆市2025黑龙江大庆市老干部活动中心(大庆老干部大学)招聘2人笔试历年参考题库典型考点附带答案详解
- 城市更新片区管线迁改方案
- 混凝土泵送浇筑安全技术交底
- 机械设备生产线布局优化方案
- 2026年豆类行业创新技术报告
- 光储充一体化电站施工技术方案
- 有机合成实验室安全培训课件
- 2025年中国农业科学院烟草研究所第二批公开招聘(4人)考试参考题库及答案解析
- 高标准农田知识培训课件
- 车缝工艺基础知识培训课件
- 2025年征兵文化考试题及答案
- 总工会干部培训课件
- 2024-2025学年八年级下学期数学期中试题汇编《垂直平分线与角平分线》含答案解析
- 关于加强医药卫生领域廉政建设的意见(2025年版)解读
- 生产主管的转正述职报告
- 剧毒化学品、放射源存放场所治安防范要求内容
- 海南省海上搜救应急预案
评论
0/150
提交评论