服务器报告Word下载.docx
- 文档编号:16480132
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:12
- 大小:127.43KB
服务器报告Word下载.docx
《服务器报告Word下载.docx》由会员分享,可在线阅读,更多相关《服务器报告Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
8
服务器概要设计
1.服务器端需实现接收,存储和转发三种基本功能。
另需根据SMS协议标准实现延时发送,定时发送,匿名发送,短信屏蔽功能。
服务器端需启动守护进程。
2.短信服务器:
3.A、提供用户管理表
4.B、提供短信发送日志并通知是否到达客户手机
5.C、提供短信接收日志并响应客户端程序连接请求
6.D、短信内容服务可主要分为点播和订阅两张,点播类型随机发生,用户需要该信息临时点播,为一次性服务,订阅信息由用户定制订阅关系,服务方按时向全部订阅者发送同样的信息
7.E、手机用户在申请使用服务方所提供的信息服务前,需要注册。
注册中要对手机用户进行验证,验证通过后注册成功
。
8.每次用户开机时都与服务端建立连接,检查服器失败队列中是否有自己的消息。
服务器收到后保存该用户的id号到数组中,并记录总个数。
当用户关机后,服务器与他断开连接,删除数组中的id号,并个数减一。
9.接收模块:
当用户发送信息报时,服务器接收并保存。
10.解析模块:
将信息报的信息解析出来(包括目的地址,源地址,大小,内容)存入结构体中。
11.发送模块:
将结构体发送到目的地址。
提供短信发送日志并通知是否到达客户手机
12.发送失败分析:
13.若对方手机未开机,则服务器保存消息,等待用户开机后再发送。
14.若是网络问题则重新发送,并确认是否接受成功。
服务器详细设计
1.服务器开始工作
2.开启子线程用来检查失败队列中是否有过期信息
3.监听客户端。
4.有客户连接,则将用户信息加入到注册表数组中
5.有客户发送消息时,调用recv()函数接收,并分析数据包
6.将数据包发送到目的地址
7.发送失败则将信息报保存到失败队列
8.客户退出时,注销该线程,并删除注册表内的信息。
服务器输入项:
协议层向服务器输入短信内容与目的号码以及服务器名字。
协议层向服务器输入传输过来的短信包。
服务器输出项:
服务器向协议层输出短信内容和来信人地址,并向源客户端输出发送信息情况提示。
3.数据结构:
Structlist_fail_pack*head//失败队列头节点(全局)
#definetotal100//服务器能接受客户端的个数
Intcount记录当前连接客户的个数
Structclient{
Intclient_fd;
Charnumber[12];
Pthread_tthread_id;
};
//用户连接时发送给服务器的结构体,记录用户信息
Structlist_head{
Structlist_head*prev;
Structlist_head*next;
Structfail_pack{
Structpdu_packtmp;
Structtimetimestamp;
//发送失败后保存的结构体
Structlist_fail_pack{
List_headlist_h;
Structfail_packf_pack;
};
//建立失败内容链表
四.所有函数调用接口:
1./*功能:
该线程获取当时时间,并检查失败队列每个节点的的时间戳,若时间戳失效则删除该节点*/
Pthread_create()
流程图:
2./*功能:
删除失败队列中的某个节点
参数:
temp:
要删除的节点
成功返回1,失败返回-1*/
Intdel_failpack(Structlist_fail_pack*head,Structlist_fail_pack*temp)
3./*函数功能:
用户退出时删除注册表的记录
structclienthead注册表数组头地址,pthread_id:
要退出的用户线程号
成功:
返回1;
失败:
-1
*/
Intdel_login(structclienthead,pthread_id)
4./*函数功能:
获取源地址
形参列表:
structclienthead注册表数组头地址,UnsignedChar*number:
得到的号码。
返回值:
成功:
1;
-1*/
Intget_src_addr(structclienthead,UnsignedChar*number,intclient_fd)
5./*函数功能:
获取目的地址。
因为包内的地址是用数组存放的,所以要先获得号码的长度len,在获取号码,并将号码以字符串的形式存放。
structclient_send_pdutemp//用户发送过来的包节点
成功为0;
Intget_dest_addr(structclient_send_pdutemp,UnsignedChar*)
6./*函数功能:
获取消息内容
0;
Intget_message(structclient_send_pdutemp,char*)
7./*注册函数功能:
将用户的地址,线程号,sock_fd放入structclient结构体中。
head:
注册表数组的头地址,将新产生的节点插入链表;
返回值flag,用来判断注册是否成功:
1:
成功,-1:
失败*/
Intlogin_user_list(structclient*head)
8./*函数功能:
发送信息后返回给用户的信息
intflag=login_user_list().flag=1,将原包的buffer改为success返回;
flag=-1,将包的buffer改为fail并将包发回对方*/
VoidReturn_to_srcuser(structclient_send_pdu*tmp)
9./*函数功能:
ser_recv()接受到包后,通过get_dest_addr获得目的地址查看是否是发给服务器的信息,还是发送给其他人的.若是发送给服务器的,解析信息内容(a.点播;
b.注册)。
否则直接发出去
structclient_send_pdu*tmp
返回值:
成功;
-1:
Intisfirst_login(structclient_send_pdu*tmp)
10./*函数功能:
将获得的包发送给目的地址.
解析包获得目的地址,与注册表里的地址匹配,若有,获得fd并发送出去;
若无,将包放入Structlist_fail_pack失败链表中.
包结构体。
Intsend_out(structclient_send_pdu*tmp,Structlist_fail_pack*head)
11./*函数功能:
查找在注册表内是否有目的地址
目的地址,注册表头节点
返回:
返回structclient*tmp;
IntFind_dest_addr(unsinged*dest,structclient*head)
12./*函数功能:
提供给注册函数调用。
用户开机与服务器连接时查询服务器失败队列中是否有自己的消息。
有就发送
客户的地址,失败队列的头节点
1:
Intinquire_message(unsignedchar*src,List_head*head)
13./*遍历失败队列,取得时间戳。
Intinquire_failpack_time(List_head*head,unsignedchar*time)
14./*客户连接时判断服务器是否接受*/
Iseccept_client(intcount,inttotal)
五.整体函数流程图:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 服务器 报告