基于Socket仿微信系统网络应用课程设计报告.docx

上传人:b****5 文档编号:6340813 上传时间:2023-01-05 格式:DOCX 页数:29 大小:1.78MB
下载 相关 举报
基于Socket仿微信系统网络应用课程设计报告.docx_第1页
第1页 / 共29页
基于Socket仿微信系统网络应用课程设计报告.docx_第2页
第2页 / 共29页
基于Socket仿微信系统网络应用课程设计报告.docx_第3页
第3页 / 共29页
基于Socket仿微信系统网络应用课程设计报告.docx_第4页
第4页 / 共29页
基于Socket仿微信系统网络应用课程设计报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

基于Socket仿微信系统网络应用课程设计报告.docx

《基于Socket仿微信系统网络应用课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于Socket仿微信系统网络应用课程设计报告.docx(29页珍藏版)》请在冰豆网上搜索。

基于Socket仿微信系统网络应用课程设计报告.docx

基于Socket仿微信系统网络应用课程设计报告

 

(计算机学院)

网络应用课程设计报告

题目:

基于Socket仿微信系统

专业名称:

网络工程1101

班级:

学生姓名:

学号(8位):

指导教师:

设计起止时间:

2014年6月16日~2014年6月27日

 

一.设计目的

1.掌握网络应用设计的方法和步骤;

2.掌握用户需求分析的方法和设计文档的编制方法;

3.掌握应用开发辅助软件的使用方法;

4.掌握数据库设计方法;

5.掌握通信协议的特点,消息格式设

6.掌握软件测试的基本流程。

2.设计内容

随着网络的快速发展,社交网站也变得越来越普及,人们不必再去花费大量的时间和精力去参加社交活动所,只要通过互联网便可拥有自己的朋友圈。

仿微信系统基于Socket实现C/S架构完成系统搭建,安卓端作为客户端,服务器端采用多线程响应每个客户端,在服务器端有用户注册到数据库,存储转发客户端相关消息。

客户端界面与功能完成微信官方客户端的部分常用功能,包括语音实现,消息实现,图片实现等。

主要完成一个具有实用价值的网络应用程序,该应用中应包括:

图形化界面、套接字通信、多线程处理、相应的业务处理逻辑等。

对于该系统:

第一,通讯基础模块的快和省。

 手机社交产品种类很多,包括手机IM、SNS、图片分享、位置交友等。

而这些社交产品都有一共同的功能:

通讯,这是手机社交产品最为基础的功能。

而用户对通讯的要求非常简单,那就是要快和省。

 因此所有手机社交类产品开发准则第一条就是:

通讯基础模块的快和省。

如果没有这一基础,其他的功能都妄谈。

 第二,交互设计要轻和简洁

 由于社交类应用,都牵扯到用户的交互,而交互的设计必须轻和省。

所谓轻,就是要尽可能减少产品的层次,最好只有一层,并可以通过滑动触控迅速在各功能之间切换;所谓省,就是要求一步可以完成的操作,不要让用户做2步。

 目前,新浪微博手机客户端的交互就存在很大问题。

由于评论与转发分别提醒用户,导致一个内容用户看2次,刷新2次微博,浪费时间和流量,没有做到轻;而评论功能,则需要做2步才可以完成,没有做到省。

 第三,手机社交产品都应具备LBS功能

 SoLoMo作为互联网与现实之间的桥梁,可以让用户轻松的从线上走到线下,这也是互联网从虚拟走向现实的开始。

一款社交产品,如果只有线上的沟通,时间久了,用户会感觉到无价值,而一旦整合LBS功能,则让其社交的价值更加实在,更容易落地。

而且通过LBS功能,还可以与身边的各类生活服务相结合,对用户生活带来巨大帮助。

比如,手机QQ的查看附近的人和查看附近的商家,就是社交+LBS的应用。

  第四,读图时代来临,“轻社交”盛行

  例如Instagram卖了10亿美元,这被认为是移动互联网市场的最大黑马,而其快速发展的原因在于用户可以通过这个简单的软件分享自己的照片。

有数据显示,facebook中70%的信息是图片信息。

用户随手拿起手机,拍一张照片,然后通过分享与朋友、陌生人互动,这其实触动了用户show的神经,而每个人都有show的欲望。

  目前,快速发展的path,微博的美图精选,甚至是手机QQ都加入个人名片图片墙,微信的朋友圈,其实都看中了读图的巨大市场前景。

而图片加上简单的文字,构成了轻社交,而用户对这些照片,或许只是一个“赞”,一个表情符即可表达自己的观点。

用户越来越懒惰,而share和show却越来越疯狂,我想这正是“轻社交”时代的标志。

总之,社交软件的兴起不是偶然的,满足大多数网名的需求。

 

3.概要设计

本系统中提供以下功能:

●客户端首先注册登录名和密码,服务器将此信息保存在XML文件中;

●客户端通过登录的方式进入应用;

●客户端获得已在用户列表权限;

●客户端默认发送的信息为公开信息;

●客户端可以选择消息的接收者;

●客户端可以发送字符消息,语音消息,图片表情给指定接收者;

●服务器端管理用户信息;

●服务器端向客户端转发消息;

●服务器端采用多线程的方式来响应客户端连接;

C:

android平台实现S:

javaproject实现

 

1.功能模块图

图1仿微信系统功能模块图

2.各个模块详细的功能描述

①注册:

服务器端中增加一个用户的信息,客户端需要填写用户名、头像图片等基本信息。

②登陆:

用户提交IP,端口号,用户名进行登录

③验证:

服务器端接收到用户信息与数据库内容比对进行验证

 

④文字发送:

Client1向Client2发送“hello”,数据流程为Client1→Server(解析消息内容,查找接收者Client2的写线程)→Client2,这样就能准确的将消息发送到Client2。

⑤语音发送:

发送端有三个主要的类:

AudioRecorder(负责音频采集),AudioEncoder(负责音频编码),AudioSender(负责将编码后的数据

发送出去);这三个类中各有一个线程,录制开始后,这三个线程一起运行,分别执行各自的任务,AudioRecorder采集音频后,添加到AudioEncoder的音频数据的List中,而AudioEncoder的编码线程不断从List头部取出数据,调用ilbc的底层\函数进行编码,编码后的数据则又添加到下一级的AudioSender的List中,AudioSender又不断从头部取出数据,然后发送出去。

⑥图片发送:

client上传图片给服务器,然后转发给各个客户端。

四.详细设计

1.功能函数的调用关系图

Server端:

图1User类关系图

图2Constant类关系

图3Server类关系

图4工具类关系

 

图5仿微信系统服务器端功能函数图

②信息类:

User类用户信息Message类消息ContentFlag内容标识类,区分不同的消息类型

③主类:

MainServer类启动服务器

④业务逻辑类:

ChatServer类服务器Socket处理chatServerTask类Quit()服务器终止,关闭所有线程start()服务器启动SocketTask()内部线程类,负责与个客户端的数据通信sendMsg()发送消息run()//处理注册消息//处理登录消息//将聊天室其它所有在线用户的头像数据缓存到该登录用户客户端//加载用户头像资源//循环向连接的每个Socket客户端发送登录消息//处理录音消息//循环向连接的每个Socket客户端发送消息//处理普通消息//处理退出消息

 

Client端:

图6仿微信系统客户端功能函数图

 

①适配器类:

ChatMsgViewAdapter聊天页面ListView内容适配器

ExpressionGvAdapter表情页面GridView内容适配器

②工具类:

ExpressionUtil正则表达式处理工具类,用来处理表情信息

FileDealTool文件处理类

StreamTool获取要从流中读取的数据长度,网络流数据格式

SystemConstant配置常量

③消息标志类:

ContentFlag内容标识类,区分不同的消息类型

④消息接口:

MessageUser

⑤服务类:

1.MessageService类startConnect()建立连接quitApp()应用退出receiveMsg()接收消息saveRecordFile()保存录音文件parseJsonToObject()解析json字符串sendMsg()发送消息sendRecordMsg()发送语音消息

2.RegisterService类registerUser()注册用户

3.UserService类负责用户登录的业务类

⑥接口类:

IhandleMessge接收并处理消息的接口

⑦数据库帮助类:

MessageDbHelperUserDbHelper

⑧业务逻辑类:

Appstart()ChatActivity()UserLoginActivity()UserRegisActivity()WelcomeActivity()

2.各功能函数的数据流程图

 

3.重点设计及编码

A.数据库设计

用户信息表

字段

类型

UID

int

Auto_increment

Primarykey

NAME

Char(20)

Notnull

PASSWORD

Char(10)

‘11111111’

IMAGE

Char(20)

‘1402971148159.png’

B.流程设计

C:

消息格式设计

在服务器端发送的消息

用户登录消息

ClassmsgimplmentsSerializable{

StringuserID;

StringuserPWD

StringimageID;

}

聊天室消息

#senderID

#receiverID

#content

#sendTime

D:

核心编码

送端有三个主要的类:

AudioRecorder(负责音频采集),AudioEncoder(负责音频编码),AudioSender(负责将编码后的数据

发送出去);这三个类中各有一个线程,录制开始后,这三个线程一起运行,分别执行各自的任务,AudioRecorder采集音频后,添加到

AudioEncoder的音频数据的List中,而AudioEncoder的编码线程不断从List头部取出数据,调用ilbc的底层\函数进行编码,编码

后的数据则又添加到下一级的AudioSender的List中,AudioSender又不断从头部取出数据,然后发送出去;

由于采用的是Socket连接Tcp协议,所以必须有一台服务器充当Server,由于客户端和服务器是多对一的关系,所以服务器端需要为每个建立连接的用户分配一个线程,因此考虑使用线程池管理多线程以提高效率。

服务器核心内容如下图所示。

Client1向Client2发送“hello”,数据流程为Client1→Server(解析消息内容,查找接收者Client2的写线程)→Client2,这样就能准确的将消息发送到Client2。

ServerManager类实现对Socket的管理,类实例化后就循环监听客户端发送的链接请求,此处accpet()阻塞等待,知道有链接进来后才往下执行,

为链接进来的socket连接分配相应的读写线程,并以HashMap记录线程每个用户对应的OutputThread,方便后面服Server对消息进行反馈和转发

为方便开发,Socket的IO读写采用了ObjectOutputStrem和ObjectInputStream,简单看下Socket通讯模型

设定消息协议,服务器和客户端都根据协议发送消息,例如LOGIN表示登陆,此处理论上用enum比class更规范,但是由于Socket读写是用的Object流,读写的对象必须序列化,而且对象中变量类型必须都为Java基本类型,故只能用int了。

定义好消息对象模型。

通过读线程,不断地读取客户端发来的消息,并根据不同的消息类型,进行相应的处理

写线程,内容简单、工作单一,随时准备着往socket里写信息,外部通过setMessage()方法,唤醒线程,写完之后线程继续等待

5.测试数据及运行结果

1.正常测试数据和运行结果

客户端:

c

服务器端:

2.异常测试数据及运行结果

六.调试情况,设计技巧及体会

1.改进方案

对自己的设计进行评价,指出合理和不足之处,提出改进方案;

 

2.体会

对设计及调试过程的心得体会。

 

七.参考文献

[1]作者.书名.出版社.出版年

[1]朱辉,李刚.JAVA网络程序设计.西安电子科技大学出版社.2012年

八.附录:

源代码(电子版)

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

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

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