ImageVerifierCode 换一换
格式:DOCX , 页数:54 ,大小:827.87KB ,
资源ID:29228250      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29228250.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(短信收发系统设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

短信收发系统设计.docx

1、短信收发系统设计项目设计报告 上海易嵌 项目名称: 短信收发系统设计 项目负责人: 汤汝 项目时间: 组员: 邵林、陈阳、余刚 概要设计部分一、设计需求使用TCP/IP协议模拟GSM协议设计短信收发系统。客户端要求1.客户端第一界面为写短信,收件箱,发件箱,已发件箱,草稿箱,短信设置。用户可自定义文件夹。2.写短信界面进入后需要输入收件人和短信内容,收件人可以从电话本模块中选择,也可以直接输入号码,如输入号码和电话本中存在记录匹配,需直接显示为电话本中姓名,输入完成后可进行发送操作或存入草稿箱。3.收件箱中存储从网络端收到的短信,收件箱中的短信按照接受时间排序,未读短信需要被标识。对收件箱的操

2、作包括删除短信(包括单条删除,多条删除和全部删除),显示短信数量,按发件人排序。单独对每个短信条目的操作包括删除,回复,转发,查看信息详情,将发件人保存至电话本,将短信内容中号码保存至电话本,将短信条目移至自定义文件夹。4.发件箱中保存正在发送中的短信,如发送成功,则短信转存至已发件箱中。如发送失败,则短信仍保存在发件箱中。对发件箱的操作包括删除短信(包括单条删除,多条删除和全部删除),显示短信数量。单独对每个短信条目的操作包括删除,转发,发送。5.已发件箱中保存发送成功的短信,对已发件箱的操作包括删除短信(包括单条删除,多条删除和全部删除),显示短信数量,按收件人排序。单独对每个短信条目的操

3、作包括删除,转发,查看信息详情,将收件人保存至电话本。6.草稿箱存储短信编辑的草稿,对草稿箱的操作包括删除短信(包括单条删除,多条删除和全部删除),显示短信数量。单独对每个短信条目的操作包括删除,发送。7.自定义文件夹由用户定义,用户可定义自定义文件夹名称。对自定义文件夹的操作包括删除文件夹,删除短信(包括单条删除,多条删除和全部删除),显示短信数量。对单条短信的操作同收件箱。用户可定义多个自定义文件夹。8.短信设置中条目项为 是否匿名发送,当前容量显示,自定义文件夹管理,是否开启发送报告,短消息服务中心设置,信息有效期,短信黑名单功能。自定义文件夹管理包括创建自定义文件夹,重命名自定义文件夹

4、,删除自定义文件夹。服务端要求服务器端需实现接收,存储和转发三种基本功能。另需根据SMS协议标准实现延时发送,定时发送,匿名发送,短信屏蔽功能。服务器端需启动守护进程。短信服务器:A、提供用户管理表B、提供短信发送日志并通知是否到达客户手机C、提供短信接收日志并响应客户端程序连接请求D、短信内容服务可主要分为点播和订阅两张,点播类型随机发生,用户需要该信息临时点播,为一次性服务,订阅信息由用户定制订阅关系,服务方按时向全部订阅者发送同样的信息E、手机用户在申请使用服务方所提供的信息服务前,需要注册。注册中要对手机用户进行验证,验证通过后注册成功限制性需求1 短信字符编码要求根据SMS协议实现。

5、2 客户端电话本条数最大200条。客户端短信最大条目数为300条。最大条目数指所有短信文件夹内包括的条目数总量。服务器端存储容量不做限制。四 安全性及可靠性需求1 要求网络传输非明码传输,并保证网络传输数据之可靠性。2 要求服务器端稳定安全。3 要求客户端存储安全。项目分配情况责任人任务备注汤汝总体设计报告,协议层的设计报告,以及实现与调试,应用层电话簿功能实现。确保协议层的实现,负责审核各个模块的设计,提供参考性意见。余刚服务器设计报告,服务器的实现与调试。确保服务器的稳定安全。陈阳、邵林应用层设计报告,应用层的实现与调试。良好的界面控制,程序的稳定与安全。全体成员对项目进行综合性调试与测试

6、。确保实现基本功能的前提下进行版本的升级。二、体统总体结构图三、模块介绍1.服务器负责人:余刚服务器设计为多线程程序,每次用户注册后创建线程为其提供服务。每次用户退出结束结束服务线程。服务器运行开启守护进程,负责写日志以及清理到期的发送失败短信。其响应流程图如下:每次用户开机时都与服务端建立连接,检查服器失败队列中是否有自己的消息。服务器收到后保存该用户的id号到数组中,并记录总个数。当用户关机后,服务器与他断开连接,删除数组中的id号,并个数减一。线程接收短信包后提取目的地址,分析目的地址,设置源地址,转发;线程处理流程如下:接收模块:当用户发送信息报时,服务器接收并保存。解析模块:将信息报

7、的信息解析出来(包括目的地址,源地址,大小,内容)存入结构体中。发送模块:将结构体发送到目的地址。提供短信发送日志并通知是否到达客户手机发送失败分析:1.若对方手机未开机,则服务器保存消息,等待用户开机后再发送。2.若是网络问题则重新发送,并确认是否接受成功。服务器数据结构:Struct list_fail_pack *head /失败队列头节点(全局)#define total 100 /服务器能接受客户端的个数int count 记录当前连接客户的个数Struct clientInt client_fd;/套接字描述符Char number12;/电话号码Pthread_t thread_

8、id;/线程IDStruct client *next; /用户连接时发送给服务器的结构体,记录用户信息Struct list_headStruct list_head *prev;Struct list_head *next;Struct fail_packStruct client_send_pack tmp;Struct time timestamp;/发送失败后保存的结构体Struct list_fail_packStruct List_head list_h;Struct fail_pack f_pack;/建立失败内容链表2.协议层协议层分为客户端和服务器两种;总共有两个线程,其中

9、接收线程一直存在系统中阻塞读取端口信息,接收到信息后解压解密后发送给应用层。发送线程由用户调用接口函数后开启发送线程,获得发送内容后压缩加密后再打包,发送至服务端。Struct client_send_pdu_head/客户发送数据包头部Unsigned char sca13;Unsigned char pdu_type;Unsigned char mr;Unsigned char da_len;/目的地址长度Unsigned char da_type;Unsigned char da11;/目的地址Unsigned char pid;Unsigned char dcs;Unsigned ch

10、ar vp;Unsigned char udl;/用户数据长度;Struct client_recv_pdu_head/客户接收数据包头部Unsigned char sca13;Unsigned char pdu_type;Unsigned char oa_len;/源地址长度Unsigned char oa_typeUnsigned char oa11;/源地址Unsigned char pid; Unsigned char dcs; Unsigned char scts7;Unsigned char udl;/用户数据长度;Struct client_send_pdu/客户端发送数据包 S

11、truct client_send_pdu_head head;Char buffer140;;Struct client_recv_pdu/客户端接收数据包Sturct client_recv_pdu_head head;Char buffer140;;协议层模块图:客户端协议层:服务端协议层:服务器协议需要修改数据包头部信息,在将发送用户填充到源地址里去;客户端协议层接口:/*应用层发送接口*/Unsigned int app_send(const char *app_buf, size_t buf_len,const char *number);/*应用层接收接口*/Unsigned i

12、nt app_recv(char *app_buf,size_t buf_len,char *number);服务器协议层接口:/*服务器发送接口*/Unsigned int ser_send(int dest_sockfd, struct client_recv_pdu *temp, size_t temp_size,const char *src_number);/*服务器接收接口*/Unsigned int ser_recv(int src_sockfd, struct client_send_pdu *temp, size_t temp_size);3.应用层模块短信系统设计短信应用层

13、概要流程图。应用层包括收件箱、写短信、发件箱、草稿箱、已发件箱、短信设置和私密信箱(自定义文件夹)七大功能,每个功能有各自的子功能。应用层通过两个进程进行短信收发及其它信息的传递。应用层将短信信息及各种标志传递给协议层,协议层经过处理发送给服务器,服务器通过处理后发送到指定客户端,经协议解析后发送给应用层。应用层读取信息并显示给用户。 应用层运行设计:应用程序由系统开机时启动协议层进程,短信进程和电话簿进程;其中启动协议层进程时注册用户到服务器;与服务器建立连接;短信进程中建立接收线程,阻塞接收服务器短信服务信息。在调用发送函数时,启动发送线程,发送完毕结束发送线程。电话簿进程提供联系人信息。

14、应用层运行流程图:应用层数据结构:typedef struct msm/短信结构体 char phnoenum11; /存放电话号码 char time15;/存放时间字符串,将时间命名为文件名 char *message; /存放短信内容MSM;详细设计部分1、服务器设计与分析(负责人:余刚)服务器应用层输入输出服务器输入项:协议层向服务器输入短信内容与目的号码以及服务器名字。协议层向服务器输入传输过来的短信包。服务器输出项:服务器向协议层输出短信内容和来信人地址,并向源客户端输出发送信息情况提示。二各个模块介绍:接收模块:/*函数功能:获取源地址。形参列表:struct client *h

15、ead 注册表数组头地址。Unsigned Char *number:得到的号码。Int Client_fd:客户的套接字。返回值:成功:1;失败:-1*/ Int get_src_addr(struct client *head, Unsigned Char *number,int client_fd);/*函数功能:ser_recv()接受到包后,通过get_dest_addr获得目的地址*查看是否是发给服务器的信息,还是发送给其他人的.若是发送给服*务器的,解析信息内容(a.点播;b.注册)。否则直接发出去。*参数:struct client_send_pdu *tmp:协议发来的包。*

16、返回值:1:成功;-1:失败*/Int isfirst_login(struct client_send_pdu *tmp);流程图:注册模块:/*函数功能:获取消息内容*形参列表: struct client_send_pdu temp /用户发送过来的包节点。*char *message:获取的消息;*返回值:成功:0;失败:-1*/Int get_message(struct client_send_pdu *temp ,char *message);/*功能:将用户的地址,线程号,sock_fd放入struct client结构体中。*形参列表:head:注册表数组的头地址,将新产生的

17、节点插入链表;*返回值flag:用来判断注册是否成功:1:成功,-1:失败*/Int login_user_list(struct client *head);流程图:/*函数功能:发送信息后返回给用户的信息.参数:struct client_send_pdu *tmp要返回的包。int flag=login_user_list().flag=1,将原包的buffer改为success返回;flag=-1,将包的buffer改为fail并将包发回对方*/Void Return_to_srcuser(struct client_send_pdu *tmp ,int flag)流程图:/*函数功能

18、:提供给注册函数调用。用户开机与服务器连接时查询服*务器失败队列中是否有自己的消息。有就发送。*参数:unsigned char *src:客户的地址.*List_head *head:失败队列的头节点*返回值:1:成功;-1:失败*/Int inquire_message(unsigned char *src, struct client_send_pdu *head);流程图:发送模块:/*函数功能:获取目的地址。因为包内的地址是用数组存放的,所以 *要先获得号码的长度len,在获取号码并将号码以字符串的形式存放。*struct client_send_pdu temp :用户发送过来的包

19、节点。*Unsigned Char *dest_addr:获得的目的地址。*成功为1;失败:-1*/ Int get_dest_addr(struct client_send_pdu *temp, Unsigned Char *dest_addr);流程图:/*函数功能:将获得的包发送给目的地址. 解析包获得目的地址,与*注册表里的地址匹配,若有,获得fd并发送出去;若无,将包放入*Struct list_fail_pack失败链表中.*将要发送出去的包结构体struct client_send_pdu *tmp。*目的地址:unsigned char *dest_addr*返回值:成功:1;

20、失败:-1*/Int send_out(struct client_send_pdu *tmp,unsigned char *dest_addr) ;流程图:/*函数功能:查找在注册表内是否有目的地址。 *参数:unsinged char *dest:目的地址. * struct client *head:注册表头节点。 *返回:成功:返回struct client *tmp;失败:-1*/Int Find_dest_addr(unsinged char *dest, struct client *head);流程图:/*函数功能:发送信息后返回给用户的信息.参数:struct client_

21、send_pdu *tmp要返回的包。int flag=login_user_list().flag=1,将原包的buffer改为success返回;flag=-1,将包的buffer改为fail并将包发回对方*/Void Return_to_srcuser(struct client_send_pdu *tmp ,int flag)流程图:权限设置模块:/*函数功能:客户连接时判断服务器是否接受*参数:count:当前连接的个数。* Total:总共可以接受的队列*返回值:1:成功;-1:失败*/Int Iseccept_client(int count,int total )流程图:删除模

22、块:/*功能:遍历失败队列,取得时间戳。 * 参数:struct client_send_pdu *head.:失败队列的头; * unsigned char *time:获得的时间戳 * 返回值:1:成功;-1:失败。*/Int inquire_failpack_time(struct client_send_pdu *head, unsigned char *time)流程图:/*功能:删除失败队列中的某个节点。*Struct list_fail_pack *head :失败队列的头节点。*Struct list_fail_packtemp:要删除的节点。*返回值:成功返回1,失败返回-1

23、*/Int del_failpack(Struct list_fail_pack *head,Struct list_fail_pack *temp);流程图:/*函数功能:用户退出时删除注册表的记录。*struct client head 注册表数组头地址;*pthread_id:要退出的用户线程号。*成功:返回1;失败:-1*/Int del_login(struct client head,thread_t pthread_id)流程图:/*功能:该线程获取当时时间,并检查失败队列每个节点的的时间戳,*若时间戳失效则删除该节点.*Struct list_fail_pack *head:失

24、败队列的头节点。*成功:1;失败:-1*/Int Over_time(Struct list_fail_pack *head);流程图:守护进程:功能介绍:当服务器开启时,fork()创建守护进程。因为有进程间的通讯问题,所以先要建立一个共享内存区;建立日志表,当用户端通过服务器发送消息时,就更新日志表。该日志表主要用来记录发送的时间及短信的时间。二、协议层设计与分析(负责人:汤汝)协议层功能描述:协议层分为客户端协议与服务端协议,客户端协议主要负责对客户应用程序所需要发送的数据进行处理,处理模式符合标准的短信协议。并且与网络层进行通信,与服务器建立连接。具有极佳通用性和可移植性。通过接口与其

25、他层进行通信。服务器协议层主要工作在于与网络层进行通信,以及修改包头部信息。协议层输入项:应用层向协议层输入短信内容与目的号码以及服务器名字。网络层向协议层输入传输过来的短信包。协议层输出项:协议层向应用层输出短信内容和来信人地址。协议层向网络层输入需要发送的短信包。协议层接口和各个功能函数如下:1.客户端注册模块/* *user_register实现用户在服务器注册功能 *const char *servicer_name是服务器名字; *const char *number是用户的电话号码,作为服务器查找用户的唯一凭证 *电话号码最长11个字符; *const char *usrname是

26、用户用于实名注册用的用户名; *函数连接成功返回0(SUCCED); *连接失败,返回3(FAIL); *服务器已满,返回1(FULL); *服务器拒绝,返回2(REFUSE); */int user_register(const char *servicer_name, const char *number, const char *usrname);实现流程图:/* *test_number用于检测号码是否合法; *const char *number是用户提供的号码; *号码长度不合法,返回1(ERR_LEN); *非法字符,返回-1(ERR_CHAR); *合法返回0(NOERROR)

27、; */int test_number(const char *number);实现流程图/* *register_pack_set设置注册用的数据包,目的地址为服务器号码00000, *内容为号码和用户名; *struct client_send_pdu *send_pack是客户发送数据包; *const char *number是用户号码, *const char *usrname是用户名,暂时不提供实名注册; *成功返回0; *失败返回1; */int register_pack_set(struct client_send_pdu *send_pack, const char *nu

28、mber,const char *usrname);实现流程图:/* *reply_pack_analysis用于解析客户端回复使用的数据包; *struct client_recv_pdu *send_pack是客户接收数据包; *成功注册:返回0(SUCCED); *拒绝注册:返回1(REFUSE); *服务器已满:返回2(FULL); */int reply_pack_analysis(struct client_recv_pdu *recv_pack);实现流程图:2.客户端数据处理模块:/* *app_send给应用层提供发送接口; *const char *app_buf是应用层数

29、据指针; *size_t buf_len 应用层数据大小; *const char *dest_number 目的地号码; *成功返回发送字节数; *失败返回-1; */int app_send(const char *app_buf, size_t buf_len,const char *dest_number);实现流程图:/* *encrypt_app_data对应用层要发送的数据进行加密处理; *char *send_buf是应用层需要发送的数据 *size_t buf_len是用户数据大小; *该函数加密成功返回加密后数据大小; *失败返回-1; */int encrypt_app_

30、data(char *send_buf,size_t buf_len);实现流程图:/* *compress_app_data实现对应用层数据进行压缩; *即去掉每个字节的第八位 *char *send_buf是已加密的应用层数据 *size_t buf_len 是buf的大小 *成功返回压缩后数据大小 *失败返回-1; */int compress_app_data(char *send_buf,size_t buf_len);/* *app_recv给应用层提供接收接口 *char *app_buf 是应用层用于保存短信内容的buffer *size_t buf_len 应用层buffer大小 *char *src_number 是用于保存源地址号码 *成功返回接收字节数; *失败返回-1; */unsigned int app_recv(char *app_buf, size_t buf_len,char *src_numbe

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1