




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、即时通讯软件的设计与实现1系统实现模块1.1服务端模块服务端主要包括三个模块:1. 网络模块,建立TCP月艮务器,负责监听端口,与客户端建立连接并接受和 发送数据。2. 应用模块,负责处理从网络模块接收到的数据,予以分析处理,进行转发 或对数据库进行操作,并返回相关信息。3. 数据层,数据层用来与数据库建立连接,应用模块必须通过数据层来进行 数据库的操作。日志记录图4.1系统模块图1.2客户端模块用户端包块以下模块:1. 用户界面模块,此模块包括客户端的操作界面,由NetBeans编写的GUI,进行了较多的美化,采用偏向 Vista的风格。2. 网络模块,此模块包括两个小模块,TCP模块用于和
2、服务器端通讯,而 UDP 模块则负责和客户端进行P2P通讯。3. 聊天模块,此模块负责在用户聊天时候,对聊天的数据进行圭寸装,对聊天的 图片也进行压缩,以适用网络传输。在接受到聊天数据之后,又会对聊天数据进行 分解操作,最后生成聊天内容。4. 群组模块,此模块包括群组聊天、群组的创建、管理、更新等功能。5. 文件传输模块,此模块用于实现客户端之间的文件传输功能。6. 视频聊天模块,此模块用于实现客户端之间的视频聊天功能。7. 系统设置记录模块,此模块用于实现保存聊天记录,登录日志,以及保存系 统设置信息的功能。系统记录模块图4.2客户端模块图2数据库设计2.1用户表设计用户表是系统中的基础表,
3、主要用来记录用户注册时的各种信息,此表还有 一个从表userlogin表用来记录用户登录和状态信息。12Userinfo 表字段名1字段类型字段长度备注IDInt11主键UseridInt11用户IDNameVarchar20用户名SexVarchar2性别ageInt4年龄CityVarchar50城市mailVarchar50信箱addressVarchar60地址Teleph oneVarchar15电话faceint2头像号UserLogin 表字段名字段类型字段长度备注UseridInt11用户IDPassVarchar20用户密码FettleInt2用户状态:IpaddressVa
4、rchar20IP地址2.2用户关系表用户关系表是用来保存用户之间的好友关系的数据表,查询好友列表的时候 要从此表中查询与自己ID想关联的好友ID,type字段可以设置两者的关系,其中 1为好友关系,0为黑名单。字段名字段类型字段长度备注Idint11主键UseridInt11用户ID号Fren didInt11好友ID号TypeInt4关系类型其他表,如组群表,族群信息表就不在此一一列出3系统模块的详细设计此章节将叙述系统部分模块的设计方法和具体实现。3.1网络模块的设计实现本系统采用TCP和UDP昆合的网络通讯,客户端与服务器之间登录验证时采用 TCP连接,登录之后,客户端与服务器采用 U
5、DP方式保持通讯,客户端和客户端之 间采用UDP连接,如果无法直接连接,通过服务器申请 UDP穿透NAT如果失败, 则消息通过服务器中转传递。因为要在网络通讯中直接传递对象,故采用基于Java NIO的I/O的Cindy异步框架, Cindy 是一个 Java 异步 I/O 框架,提供了一个统一高效的模型,同时支 持TCP UDP以及Pipe,并能够方便的在异步和同步操作之间进行切换。目前其实 现是基于Java NIO,并计划通过JNI来支持各操作系统上本身提供的异步I/O功能,应用可以方便的通过运行期属性来方便的切换到更为高效的实现上。 13Java NIO包虽然提供了非阻塞I/O模型,但是
6、直接使用 NIO的非阻塞I/O需 要成熟的网络编程经验,处理众多底层的网络异常,以及维护连接状态,判断连接 超时等等。对于关注于其业务逻辑的应用而言,这些复杂性都是不必要的。不同 Java版本的NIO实现也会有一些Bug, Cindy会巧妙的绕开这些已知的 Bug并完成 相应功能。并且NIO本身也在不断发展中,Java 1.4的NIO包中只实现了 TCP/UDP 单播/Pipe , Java 5.0中引入的SSLE ngine类使得基于非阻塞的流协议(TCP/Pipe)支持SSL/TLS成为可能。使用Cindy,应用可以在同步和异步之间进 行无缝切换,对于大部分操作是异步,可某些特殊操作需要同
7、步的应用而言,这极 大的提高了易用性。 141. 服务器端编码: SessionAcceptor acceptor ; acceptor=SessionFactory.createSessionAcceptor(SessionType.TCP); acceptor.setListenPort(port);/ 设置监听端口 port 为端口号acceptor.setAcceptorHandler(new SessionAcceptorHandlerAdapter();/ 设置 SessionAcceptorHandler ;SessionAcceptorHandler 接口是处理 Session
8、Acceptor 产生的各种事件 , SessionHandler 接口则用于处理 Session 产生的各种事件。acceptor.start(); /开始执行,服务器开始监听TCP连接。SessionAcceptorHandlerAdapter 类是处理 acceptor 时间的接口,里面包括了各 种方法,我们主要使用到对象接收事件( objectReceived ),我们接受到对象以后 再对其进行处理。代码如下:new SessionAcceptorHandlerAdapter()public void sessionAccepted(SessionAcceptor acceptor,
9、Session session) throws Exception session.setPacketEncoder(new SerialEncoder(); session.setPacketDecoder(new ServerPacketDecoder(); session.setSessionHandler(new SessionHandlerAdapter() public void objectReceived(Session session, Object obj)/*这里可以得到接受到的对象,我们圭寸装成Message类*/Message message=(Message)obj
10、;2. 服务端编码首先先生成一个TCP的Session,然后为session设置远程IP地址,最后通 过设置 SessionHandlerAdapter ()来处理事件。Session session=SessionFactory.createSession(SessionType.TCP); session.setRemoteAddress(new InetSocketAddress(address,port); session.setPacketEncoder(new SerialEncoder();session.setPacketDecoder(new SerialDecoder();
11、session.setSessionTimeout(0);session.setSessionHandler(new SessionHandlerAdapter() ;3.2 用户登录的具体实现前面介绍了 Cindy 的网络框架,现在我们来演示用户登录时候的流程。用户 登录请求处理模块是用户通过了验证 ( 验证过程在信息查询服务器上完成 ),取得了 合法登录密钥之后,登录文字通讯服务器的第一步。用户登录请求处理模块的处理过程是 : 接收用户登录请求,首先判断其登录密 码是否正确 ( 登录密码是用户注册时候输入的口令,服务器收到该请求后,首先查 询数据库中此用户 ID 的密码,然后判断和用户发送
12、的登录密码是否一致)。如密钥不正确则关闭该连接,并发送密码错误的信息。如果密钥正确,则修改该用户在数 据库中的 IP 记录,并从数据库中读取出其所有的好友列表,并将此用户上线的消 息发送给其好友,服务器同时将此用户此时此刻登录的情况记录在日志中。客户端收到密码验证正确的消息之后,会受到服务器发送来的好友列表和详 细信息,并通过这个好友列表构建好友信息,完成登录。在客户端中,我们提供了隐身上线,和保存密码两个选择项,其内容保存在 Hitayo.ini 文件中。在登录窗口中,可以手动输入服务器的 IP 地址,并将新的服 务器地址保存进服务器选择列表,下次登录时,可以自动选择到上次登录的服务器 地址
13、,同时还具备检测服务器是否畅通的功能。登录窗口界面如下:3.3聊天模块的具体实现图4.3客户端登录界面一款即时通讯软件,最基本的功能莫过于即时聊天功能。在本系统中,对聊 天信息重新封装(ChatSeria类),使系统的聊天功能支持对文字的字体、大小、 粗细、颜色进行设置,还能够在文字中插入图片,并能支持快捷键,用Ctrl +*于加WFfKf的卿刃澤天软仲.Enter可以发送消息。图4.4聊天窗口界面实现功能的关键在于对聊天信息封装和对文字中图片的定位和还原,以下代 码实现了图文混合后对聊天信息的还原:for(i nt x=0;xS! I1 較.IM20汽000 ”9 23TaW. 1*035I
14、kT AZ02. IBT.15,3on蛊Ur冷詩1ST. 34. LEKzIlMOO 1ST. FL 291:1136Scmsr S211237aGa 1I123S图4.6 UDP穿透示意图3. Client A 通过 Server S 得到 B 的 IP 地址是 187.34.1.56 : 40000,然后 Client A 向此IP发送信息,NAT B抛弃此条信息。4. Client A 通知 Server S,申请 UDP穿透。5. Server S 通知Client B,并将 Client A 的IP地址和端口告诉 Client B;6. Clie nt B留下一个Session。收到
15、信息以后,像Client A 也发送一条消息,便会在 NAT B上7. Client A再向Client B 发送信息时候,NAT B会将消息转发给 ClientBo8. 完成UDP穿透,Client A 和Client B 可以互相通讯。3.6文件传输模块的设计文件传输是即时聊天软件的主要功能之一,而文件的特殊性也决定了对于通 过网络通信实现文件的传输,可靠性与完整性的要求都很高。根据需求分析在本模 块儿的设计中,我们未采纳UDP的传输方式。但是,目前处于两个原因的考虑:1)IP地址短缺;2)网络安全防止黑客软件和病毒的泛滥。大部分上网的个 人计算机都被“隐藏”于防火墙或者 NAT之后。这就
16、在很大程度上阻挡了面向连接 的对等端实现TCP互联。因此,在此模块中,为适应各种情况,保证文件的成功传 输,我们采取了 P2P和C/S模式并存,互为补充的模式,以 P2P方式为主。在进行 文件传输时,首先采取 P2P方式进行互联。如果由于任何原因点对点方式不能成 功,系统或自动采取点对服务器方式,从而确保文件传输的成功,模块设计结构如 图图4.7 P2P连接示意图系统采用TCP的方式发送,通过 CIND丫的框架下,对文件进行分包发送的代 码如下:发送方(部分)for (int i = 1; i = QUEUE_SIZE; i+) Buffer buffer = BufferFactory.al
17、locate(MESSAGE_SIZE);buffer.positi on( 2);int readCo unt = buffer.read(fc);/ readCou nt为-1则文件已经读取完毕,发送完成关闭if (readCou nt = -1) buffer.release();future.getSessio n().close();elsebuffer.putU nsig nedShort(0, readCou nt).flip();/开始发送session.send(buffer);接收方 ( 部分 )Buffer buffer = (Buffer) obj;if (fc = n
18、ull) fileName = buffer.getString(Charset.UTF8, buffer.remaining();fc = new RandomAccessFile(fileName, rw).getChannel(); else while (buffer.hasRemaining()buffer.write(fc); / 写入文件3.7 组群功能的具体实现组群功能是即时聊天软件的一大进步,取代了曾经的基于WEB的聊天室。本系统的组群功能支持,组群的建立,加入组群,管理组群,组群公告,组群聊天等 功能,每一个用户登录以后,都可以在组群栏中创建自己的组群,并添加用户到组 群中来。创建组群的用户将成为组群的管理员,能够管理组群用户和修改组群的资料 信息等。组群聊天模式采用 TCP 连接服务器转发,之所以采用这种模式是考虑到所以 用户已经和服务器连接起来了,通过 TCP转发能够降低程序的复杂性,不过从实际 考虑,如果要投入实际运行,应该将 TCP的组群聊天室改为UDP形式。组群聊天同样支持文字的字体、颜色、大小、粗细进行设定,同时也支持图 文并茂。3.8 聊天记录模块的实现 本系统支持聊天记录的保存和查阅,在这里采用的是文件保存的形式,将聊 天记录保存为文本文件,位置在程序目录中的用户 ID 目录里,以好友的 ID 命名。 选择
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南教练员从业资格证模拟考试题库
- 2025年贺州客运从业资格证模拟考试
- 聚焦2025年房地产企业风险管理与财务稳健性提升路径报告
- 家具制造业个性化定制生产模式下的定制化服务与消费者满意度提升策略报告
- 文化产业园产业集聚与服务体系构建中的文化产业园区运营模式研究报告
- 绿色转型视角下资源型城市生态环境保护与治理报告
- 统计基础知识习题及参考答案
- 乔布斯传读后感(15篇)
- 中成药5多选试卷含答案
- 2025年锂电池用特种玻璃粉合作协议书
- 培训学校教师行为规范细则
- 龙蟒佰利联集团股份有限公司焦作西部产业集聚区天然气分布式能源项目一期工程项目环评报告
- GB/T 5155-2022镁及镁合金热挤压棒材
- GB/T 19769.4-2015功能块第4部分:一致性行规指南
- GB/T 12340-20081∶25 0001∶50 0001∶100 000地形图航空摄影测量内业规范
- GB 4789.15-2016食品安全国家标准食品微生物学检验霉菌和酵母计数
- FZ/T 62033-2016超细纤维毛巾
- 住宅建筑设计原理(二)课件
- 风险分级管控措施清单(路基工程)
- 2023年上海宝建(集团)有限公司招聘笔试题库及答案解析
- 2023年西昌市社区工作者招聘考试笔试题库及答案解析
评论
0/150
提交评论