目 录
1 绪论 1
1.1 项目背景 1
1.2 研究的目的和意义 1
1.3 国内外研究的现状 1
1.4 论文的主要内容和组织结构 2
1.5 本章小结 2
2 关键技术介绍 2
2.1 Android平台 2
2.1.1 Android特征 2
2.1.2 Android体系结构 3
2.2 TCP/IP协议 4
2.2.1 C/S模型 4
2.2.2 TCP协议 4
2.2.3 Android的MVC架构 5
2.3 多线程技术 6
2.4 运行环境 6
2.5 本章小结 7
3 需求分析 7
3.1 系统的整体分析 7
3.1.1 服务器端 8
3.1.2 客户端 8
3.2 可行性分析 9
3.3 本章小结 9
4 Android聊天软件系统设计 9
4.1 系统实现原理 10
4.2 服务器端 11
4.2.1 用户登录验证模块 11
4.2.2 信息的转发模块 11
4.2.3 刷新好友列表模块 12
4.3 客户端 12
4.3.1 用户登录模块 12
4.3.2 用户交互模块 12
4.3.3 用户注册模块 13
4.3.4 用户设置模块 13
4.3.5 用户注销模块 14
4.4 Android聊天软件用户存储数据库的设计 14
4.4.1 SQLite 简介 14
4.4.2 数据库设计 14
4.5 本章小结 14
5 Android聊天软件的实现 14
5.1 数据传输的实现 14
5.2 服务器端的实现 14
5.2.1 用户登录的实现 14
5.2.2 用户退出 14
5.2.3 更新好友列表 14
5.3 客户端代码的实现 14
5.4 客户端UI实现 14
5.4.1 半透明悬浮窗口的实现 14
5.4.2 主界面左右滑动切换的实现 14
5.5 本章小结 14
6 系统演示与运行 14
6.1 用户登录演示 14
6.2 用户注册演示 14
6.3 主界面演示 14
6.4 聊天界面的演示 14
6.5 本章小结 14
结束语 14
参考文献 14
致谢 14
4 Android聊天软件系统设计
通过上一章需求分析得到(系统的运行如图4-1所示)系统的需求分析以及大致的设计方向,本章将会从系统实现原理、服务器端、客户端与数据库设计的几个方面深层次的介绍系统所涉及的关键技术,通过这些技术的实现,系统的设计阶段将会告一段落。
图4-1系统运行图
4.1 系统实现原理
聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:
在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。如图4-2所示:
服务器端启动后先要调用Serversocket()函数建立一个流式套接字,并返回引用新套接字的描述符。然后将此套接字描述符与本机的一个端口建立关联,这由ServerSocket()函数来完成。服务器只有在调用了accept()函数进入等待状态之后才可以接受来自客户端的请求。一旦接收到客户端通过connect()发出的连接请求,accept()将返回一个新的套接字描述符,通过套接字描述符调用相应的流的read()或write()函数即可与客户端进行数据收发。待数据传送完成,本文转载自http://www.biyezuopin.vip/onews.asp?id=12482服务器和客户端调用closes()关闭套接字。需要说明的是服务器此时关闭的是此前由accept()所返回的新套接字,而不是先前开始创建的套接字。在此套接字被关闭后,服务器将再次处于阻塞状态,以等待下一个客户端的连接请求并重复上述过程。
图4-2系统实现原理
public boolean connect(User user) {boolean isok = false;try {s = new Socket("10.0.2.2", 9999);s.getOutputStream();oos = new ObjectOutputStream(s.getOutputStream());oos.writeObject(user);ois = new ObjectInputStream(s.getInputStream());type=(MessageType) ois.readObject();gf=(Group_Friend) ois.readObject();myapp.setChilds(gf.getFriends());myapp.setGroups(gf.getGroups());isok=type.isOk();if(isok){Client_To_ServerThread ccst=new Client_To_ServerThread(s);//启动该通讯线程new Thread(ccst).start();SaveClientSocket.add(user.getUsername(), ccst);}} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return isok;}