图12客户端发送信息图
如图12所示是夸号码段发送信息的,是131号码段的client端,发送给130号码的client,它需要经过131二级服务器转发给一级服务器,然后一级服务器再把信息转发给130这个二级服务器,最后130这个二级服务器把信息转发给130对应的客户端,这是信息转发的一个具体流程。
13111client send()函数把信息发给131二级服务器。 send(cfd,&send_msg,sizeof(submit),0);
131二级服务器通过号码的匹配没有找到13011的client端,就把信息转发个一级服务器,让一级服务器处理。
msg one_scli;
strncpy(one_scli.num,send_msg.delv_head.oa_add,3);
printf(\ //send(sfd,&one_scli,sizeof(msg),0); send(sfd,&send_msg,sizeof(deliver),0);
一级服务器接收到信息就会进行匹配,然后找到13011client所在的130的二级服务器,然后就把信息转发给130这个二级服务器。
memset(&send_msg,0,sizeof(send_msg));
n = recv(client.fd,&send_msg,sizeof(send_msg),0); if(n <= 0) {
printf(\ return ; }
for(i = 0;i < geshu;i++) {
if(0 ==
strncmp(send_msg.delv_head.oa_add,client.address[i].num,3))
{
send(client.address[i].fd,&send_msg,sizeof(send_msg),0); } }
130二级服务器接收到一级服务器的信息时,就会通过号码的匹配吧信息发给13011这个客户端,实现了夸号码段转发。 deliver send_msg; int i;
n = recv(sfd,&send_msg,sizeof(deliver),0); for(i = 0;i < geshu; i ++) {
if(0 == strcmp(all_cli[i].num,send_msg.delv_head.oa_add)) {
char ss[11];
strcpy(ss,send_msg.delv_head.oa_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_cli[i].fd,&send_msg,sizeof(deliver),0); printf(\ siccess****\\n\ break; } }
图13收信息运行图
如图13所示是查看收信箱的信息,其中调用了recv_print_(argv[4])函数把储存在文件中的短信信息多打印在终端上,可以显示短信的发送者号码和发送时间和具体的短信内容。
void recv_print_() { int i = 0; int j; MESSAGE arr_msg[100]; FILE *fp = NULL; int leng; char chose; fp = fopen(\ if(NULL == fp) {
printf(\ return ; } while(1) {
memset(&arr_msg[i],0,sizeof(MESSAGE)); fread(&arr_msg[i],sizeof(MESSAGE),1,fp); i++;
if(feof(fp)) break; } for(j = 0;j leng = j + 1; fflush(stdout); printf(\_msg[j].time,arr_msg[j].message); } 6.系统测试 测试的目的就是为了是寻找程序中的错误,而且是尽可能的去找出程序中的尽可能多错误[11]。程序员写的一个程序并非是写完就是完美的,未免会存在某些规避不了错误。如果程序员不能及时的将这些错误找出来并修改,有可能会造成系统无法正常工作造成一些损失。短信收发系统中一旦出了错误系统将无法运行,对人们的正常通信将带来一些麻烦。所以要通过测试,尽量的减少程序中的错误,从而达到系统稳定运作的目的,使短信收发系统工作不会收到影响。 图14一级服务器测试图 如图14所示是测试一级服务器的最大的负载量,连了十几个二级服务进行测试,看在多个二级服务器连接时一级服务器是否能正常的工作,经过测试一级服务还是可以顺利的实现信息的转发的。 图15二级服务器测试图 如图15所示是大量的client端连接到二级服务器上的,然后在测试二级服务器能否把信息的传递,在测试的过程中由于电脑性能的缘故,在信息发送的时候会出现一些的卡顿,但是信息还是可以正常的发送的。 通过如上的测试,可以实现负载均衡,这种方式可以能让更多的client进行连接,通过二级服务器来降低一级服务器的负载,同时也提高了信息的转发效率了性能。另一方面测试可以检测出系统中的一些bug,有些bug只有通过大量的重复测试才可以显示出来的,然后在解掉bug,优化系统的功能,让用户能够有更好的用户体验。 7 开发总结 经过几个月终于把自己的系统完成了和毕业论文完成,顿时感觉自己轻松了许多,但是另一方面也有一点不舍,因为毕业完成了说明我们离毕业的步伐又近了一步,但是也是我们人生的另一个起点。在这几个月当中多是利用晚上的时间去编写程序的,在编写程序的过程中也遇到很多的苦难,用对一些知识还不是很熟,用起来会出现一些错误,但是最终通过网络,通过指导老师还是把这些问题给解决了。在此过程中对以前的许多知识得到了很好的巩固和复习,还有系统中 应用到的一些新知识,自己通过网络去学然后去应用。因为自己知识体系还不是特别的完整,编程能力也没有特别的强,所以系统并没有那么的完善,所以在以后的工作中还是要继续的学习,提升自己的编程能力和分析问题的能力。 致谢 光阴似箭,日月如梭。转眼间大学的四年就要结束了,能让我的大学画上完美的句号和毕业答辩能够取得圆满的成功。我要感谢多年培育我的老师们和指导我毕设完成的指导老师,因为在写毕设的这段时间我一直在外地实习,学校有什么事刘斌老师多会第一时间的通知我,并且会细心的和我们一些写论文的技巧,和在技术给予一定的帮助。帮助我解决一些自己不能够很好解决的问题,这样我的毕业设计才能顺利的完成。最后还是要深深的感谢我的指导老师刘斌老师,这样才能够让我的大学画上完美的句号。 参考文献 [1]赵敏哲.64位Linux操作系统与应用实例[M].北京:机械工业出版社,2001. [2]庞丽萍.操作系统原理(3版)[M].武汉:华中科技大学出版社,2000. [3]张饶学.Linux网络编程[M].北京:清华大学出版社,2000. [5]郑燕飞,余海燕.linux的多线程机制探讨与实践[J].计算机应用.2001.1, 21(1):81-82 [6]王群,许中万.Linux优势分析[J].计算机与现代化,2003(10):7-8. [7]任泰明著. TCP/IP协议与网络编程[M]. 西安:西安电子科技大学出版社. 2004. [8]谢希仁. 计算机网络(5版)[M]. 西安:电子工业出版社. 2007.6 [9]陈剑.基于socket的进程间通信平台的设计与实现[D].东北大学.2009. [10]赵颖,韩秀梅,马宏骞.linux下的c语言编程[J].辽林工学院学报.2004.4 [11]陈波,石旭刚,史故臣.嵌入式c语言在系统开发中的代码优化[J].计算机时代.2008,(11):55-56. 英文摘要 Design and implementation of SMS Linux transceiver system based on C Student majoring in computer science and technology Qin ZhangYang Tutor Liu Bin