基于c的短信收发系统的设计与实现毕业论文(编辑修改稿)内容摘要:

平台: Red hat enterprise linux 5, 编译器 vim,调试器 gdb,网络配置 ifconfig, route 等等。 Client 端需求,本短信收发系统是基于 linux C 来实现的,其中客户端的需求是: client 端可以实现同号码段的 client 端进行通信,还可以和不同号码段的 client 进行通信。 在发送信息是可以选择发送和不发送,发送的保存在 里,不发送的保存在 里,接收到的信息保存在 里,并且 client 端还可以对这些信息进行查看。 Sonsever 需求,二级服务器需要可以实现同号码段 client 信息的转发, 当收到不是自己号码段的 client 信息时,需要把信息转发给一级服务器,然后通过一级服务把信息转发给 client 所在的二级服务器,这样来实现不同号码段client 端的信息之间的交互。 Send() Recv() Close() Close() 5 Fatherserver 需求,一级服务可以让多个不同号码段的二级服务器连接,来解决负载均衡,并且还要处理来自二级服务器的消息,转发给对应的二级服务器来实现信息的交互。 技术可行性 本系统是基于 linux C 语言下来实现短信的收发,其中主要应用到了网络编程 TCP 进行连接,还有 GSM 短信协议来实现 短信的正确收发,当每连接一个client 端时就启用一个线程来服务这个 client,最后使用脚本 shell 来优化后面的运行步骤。 经济可行性 经济可行性是对经济能力和投资能力,后期的维护运维费用的估算,对系统的经济效益进行估算,本短信收发系统是免费提供给用户的,因为市面上有不少收费的聊天软件,可以减少用户的使用费用来增加用户的使用黏性。 操作可行性 本系统在使用时需要在 linux系统中开一个终端来连接自己号码所在的二级服务上,因为时间的缘故并没有对界面进行优化,在操作上可能没有那么的 简洁和方便。 4 系统的设计和图分析 图 2 信息体图 如图 2 所示是保存信息的结构体,信息中包含发送者的号码,发送的时间和短信的具体内容。 一级: 二级: 图 3 二级服务器模拟图 如图 3 所示是两个服务器的示意图(一级和二级 server),一级服务器和二级服务之间采用的是 TCP 连接, TCP 是面向连接的可靠的传输 [9],确保信息能够准确无误的传输给接收者,当每一个二级服务器连接一级服务器时,一级服务器多会开辟一个线程去服务二级服务器,并且用数组存放二级服务器连接时返回的 fd 和二级服务器所代表的号码段,这可以确保信息所对应的的服务器并且能够让信息正确的转发。 fatherserver Sonserver1 Sonserver2 Sonserver3 Message 体 number time message 6 Client: 功能: 图 4 客户端功能图 如图 4所示 client 所实现的功能,客户端连接二级服务器也是采用了 TCP 连接,和服务器的连接原理是一样的,客户可以实现信息的查询,可以查询收信箱,发信箱和草稿箱等功能。 N 转发 TCP 连接 TCP 连接 TCP 连接 Y 查询 TCP 连接 转发 转发 信息 Y N 图 5 系统工作流程图 如图 5 所示是系统大致的框架和功能示意图。 当 client 发送一个信息时就会提示是否发送,发送就会保存在发信箱中如果不发送就保存在草稿箱子中。 client 发信箱 草稿箱 收信息 fatherserver Sonserver1 Sonserver2 Client1 Client2 Client3 发信箱 草稿箱 收信箱 是否 send? 是否在 ? 收信箱 7 Client 把信息发给自己号码所在的二级服务器时,二级服务器就会检查要发送至的号码是否是自己管理的号码段,如果是自己就把信息转发给本号码段的client,如果不是自己号码段的 client 就把信息转发给一级服务器让一级 服务器进行处理,一级服务器收到信息时就会检查信息的号码在哪个二级服务器所管理的号码段,然后把信息转发给对应的二级服务器,最后二级服务器把信息转发给对应的 client,当 client 端收到信息时就会打印出信息的内容并把信息保存在收信箱中。 5 系统的实现和代码分析 图 6 一级服务器运行图 如图 6所示是一级服务器的运行结果。 每连接一个二级服务器多会返回一个 fd 和它所对应的号码段,然后把这些数据保存在一个数组里面,供后面信息的匹配和查询。 = cfd。 strcpy(,buf)。 = all_address。 all_address[geshu].fd = cfd。 strcpy(all_address[geshu].num,buf)。 每连接一个二级服务器多会创建一个线程去服务它,并且要把连接上二级服务器数加 1,和线程数匹配起来。 send(cfd,hello sonser,13,0)。 pthread_create(amp。 ,NULL,fun,(void *)amp。 client)。 geshu ++。 这是处理来自二级服务器的 转发请求,通多号码段的匹配吧信息转发给对应的二级服务器上,实现信息的交互。 8 for(i = 0。 i geshu。 i++) { if(0 == strncmp(,[i].num,3)) { send([i].fd,amp。 send_msg,sizeof(send_msg),0)。 } } 图 7 二级服务器运行图 如图 7 所示,连接了两个来自 130 号码段的 client 端,分别是 13011 和13012client。 二级服务器需要绑定两个 socket进行通信,一个是和一级服务器进行通信,另一个是和 client 端进行通信。 下面的就是绑定了服务的地址,实现和服务器进行信息的交互 [10]。 SPORT = atoi(argv[2])。 strcpy(num,argv[3])。 sfd = socket(AF_INET,SOCK_STREAM,0)。 if(1 == sfd) { printf(socket create fail\n)。 close(myfd)。 return 1。 } 下面的代码主要是绑定自己的地址用于和 client端之间的通信,首先要确定协议 9 类型 AF_INET是 TCP,然后绑定自己的端口号和 IP 地址,最后用 ACCEPT()函数阻塞在那里等待着 client端的连接,经过三次握手后就可以进行通信了。 = AF_INET。 = htons(SPORT)。 = i_addr(argv[1])。 bzero(amp。 (),8)。 SPORT = atoi(argv[4])。 myfd = socket(AF_INET,SOCK_STREAM,0)。 if(1 == myfd) { printf(socket create fail\n)。 return 1。 } = AF_INET。 = htons(SPOR。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。