im即时通讯系统——局域网聊天系统(蒋娜)

上传人:繁星 文档编号:88250646 上传时间:2019-04-22 格式:PPTX 页数:42 大小:672.39KB
返回 下载 相关 举报
im即时通讯系统——局域网聊天系统(蒋娜)_第1页
第1页 / 共42页
im即时通讯系统——局域网聊天系统(蒋娜)_第2页
第2页 / 共42页
im即时通讯系统——局域网聊天系统(蒋娜)_第3页
第3页 / 共42页
im即时通讯系统——局域网聊天系统(蒋娜)_第4页
第4页 / 共42页
im即时通讯系统——局域网聊天系统(蒋娜)_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《im即时通讯系统——局域网聊天系统(蒋娜)》由会员分享,可在线阅读,更多相关《im即时通讯系统——局域网聊天系统(蒋娜)(42页珍藏版)》请在金锄头文库上搜索。

1、IM即时通讯系统 局域网聊天系统,软件工程(2)班 蒋娜 吴雪梅,设计流程,系统需求分析 系统设计 系统详细设计 系统运行结果 结论,2,3,4,5,1,系统需求分析,产品介绍 开发背景 功能要求,产品介绍,系统需求分析,IM技术全称Instant Messaging,中文翻译“即时通讯”,它是一种使人们能在网上识别在线用户并与他们实时交换消息的技术,是电子邮件发明以来迅速崛起的在线通讯方 式。IM的出现和互联网有着密不可分的关系,IM完全基于TCP/IP网络协议族实现,而TCP/IP协议族则是整个互联网得以实现的技术基础。 最早出现即时通讯协议是IRC(Internet Relay Chat

2、),但是可惜的是它仅能单纯的使用文字、符号的方式通过互联网进行交谈和沟通。随着互连网变得高度发达,即时通讯也变得远不止聊天这么简单,自 1996年第一个IM产品ICQ发明后,IM的技术和功能也开始基本成型,语音、视频、文件共享、短信发送等高级信息交换功能都可以在IM工具上实现,于 是功能强大的IM软件便足以搭建一个完整的通信交流平台。目前最具代表性的几款的IM通讯软件有MSN、Google Talk、Yahoo Messenger、腾讯QQ等。1.2 IM技术原理和工作方式 典型的IM工作方式如下:登陆IM通讯中心(IM通讯服务 器),获取一个自建立的历史的交流对象列表(好友列表),然后自身标

3、志为在线状态,当好友列表中的某人在任何时候登录上线并试图通过你的计算机联系你 时,IM系统会发一个消息提醒你,然后你能与他建立一个聊天会话通道进行各种消息如键入文字、通过语音等的交流。,开发背景,在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个局域网的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识.,系统需求分析,功能要求,寻找服务器登录 能够实现点对点单聊 能够实现群聊 能够实现文件传输 能够实现语音聊天 能动态更新在线用户列表,系统需求分析,系统设计,设计思想 系统

4、功能 系统架构 模块设计,设计思想,系统设计,整个系统分为服务器和客户端,服务器端维护各个客户端的信息。客户端的所有信息发往服务器端,再由服务器进行消息的分析处理并做出相应的控制,服务器端是所有信息的中心。 服务器端可以查看所有用户的聊天记录,监控所有用户的状态,发出用户上线、离线提示等公告,客户端则提供接收公告的功能。 本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端,每多个客户端服务器端就会相因的创建一个线程,它们之间通过这个连接来实现数据通信;然后在客户端设置一个监听器,用于监听服务器发来的消息。并根据消息做出不同的动作。,系统功能,该系统实现了用户之间的点

5、对点单人聊天,在线用户之间的群聊。为了加强之间的信息交流,还实现了用户之间文件传输、语音聊天。在客户端和服务器端都可以查看历史消息、保存消息、清空消息。为了监控用户之间的状态,服务器还可以实现踢掉用户的功能,同时用户时间文件传输的信息都会在服务器上显示。,系统设计,系统架构,选择传输控制协议TCP,使用Java的Socket编程机制,分别建立客户端与服务器端、语音传输使用的是UDP控制协议; 分别设计客户端与服务器端的界面,并使用Java应用程序用户界面的开发工具包Swing进行窗体界面的布局,以及实现部分窗口事件的相应。,系统设计,模块设计,服务器端: 主要实现向各个客户端发布系统消息,接受

6、来自客户端的各种信息并分别处理。具体功能如下: 连接控制:包括启动服务器、断开服务器以及断开某个客户端的连接; 管理作用:包括对参与聊天者的昵称进行修改以及向所有或某个客户端发送消息,维护一个IP地址和昵称所对应的哈希表,以便定位到正确的客户端,且有权强制修改用户昵称; 刷新列表:在有用户登陆或离开的时候实时更新列表,并将信息反馈到各个客户端; 登陆信息:检查用户是否已登陆,如登录,发消息通知所有用户。同时刷新在线用户列表; 聊天记录:能保存聊天记录,实现消息的保存、清空以及查看等功能; 消息处理:解析客户端与服务器端的消息交互类型,并做出相应处理,能够找到消息所对应的接收端。,系统设计,客户

7、端,主要实现向服务器端发布消息,并且对来自服务器的消息做出相应的响应。具体功能如下: 连接功能:输入服务器地址,实现登录及断开功能 登录设置:登录时,发送消息使服务器端获得相关登录信息,昵称及IP地址记录到服务器端维持的哈希表,断开后发送消息使IP地址及昵称从哈希表中删除; 监听作用:实现对服务器发送过来的消息进行监听的功能; 消息处理:接收由服务器端发送来的信息,并做出相应的响应; 聊天记录:实现聊天记录的保存、清空以及查看等功能; 消息处理:相应从服务器端接收到的消息交互类型,实现用户与用户之间的信息交互和文件交互; 传输进度:使用进度条直观地表示用户与用户间文件交互的进度。 文件传输:实

8、现客户端之间的文件发送与文件的接收功能。 语音聊天:实现客户端之间的语音聊天功能。,模块设计,系统详细设计,服务器端 界面设计 功能函数 信息处理 客户端设计与编码,服务器端,系 统 详 细 设 计,服务器 该段功能由Server.java文件中的Server类实现,具体实现过程如下: 启动服务并接收连接:服务器的任务首先是建立一个由IP地址到昵称的映射的哈希表,用于存放用户的基本信息;启动服务器后,等候建立一个连接,然后用这个连接产生的Socket创建一个Client,同时检查该用户是否已存在哈希表中,若以存在,则提示该次连接请求失败,从而实现限制IP的目的;若不存在,则将该IP地址及其昵称

9、或默认昵称的映射添加到哈希表中,接着服务器端向所有的用户发送管理信息,提示有新的用户登录,并且将刷新后的用户列表同时发送到各个客户端。 关闭服务:服务器端遍历哈希表,关掉每一个用户对应的Socket,之后,关闭服务Server。 管理作用之发送消息: 服务器端解析由客户端发送的请求,若控制字以“SPECIAL”开头,则通过控制字后的昵称从哈希表中找到对应的用户,实现服务器端到客户端的点对点消息交互;若不是以“SPECIAL”开头,则实现消息的广播发布。,管理作用之修改昵称:首先判断新的昵称是否在哈希表中存在,若已存在则给出错误提示,否则通过该用户的旧昵称在哈希表中查找到该用户,并用欲修改的昵称

10、替换掉原昵称;接着刷新服务器端的用户列表显示,最后刷新客户端的用户列表显示。 管理作用之断开连接:若要断开某个客户端与服务器的连接,首先向该用户发送被管理员请出系统的信息,然后通过该用户的昵称从哈希表中找到对应socket、service及IP地址等信息,再从每一项信息对应的列表里删除该用户的信息,最后关闭该用户的socket,同时刷新服务器端以及各个客户端的用户列表显示。 在服务其中,需要同时处理多个客户端的请求,因此此处用到了多线程处理机制。在服务器程序里创建单个Server Socket,并调用accept()来等候一个新连接,一旦accept()返回,就取得结果获得的socket,并用

11、它新建一个线程,令其只为那个特定的客户端服务,然后再调用accept(),等候下一次新的连接请求。,界面设计,该段功能由ServerFrame.java文件中的ServerFrame类实现,具体实现过程如下: 窗口布局:服务器端窗口使用了BorderLayout事务管理器,把整个容器分成了五个区域:North、South、East、West和Center,每个区域放置一个面板,每个面板又分别使用不同的事务管理器放置其他组件,如按钮、标签、文本框等,各个组将构成了一个完整的服务器端界面。 事件处理:通过Java的授权事件模型,针对组件send、Button1Button8,通过addXXXLis

12、tener(主要运用了addActionListener)方法注册监听器,并且实现ActionListener接口中的actionPerformed方法,这样,当组件触发了相应类型的事件后,此事件就会被传送给已注册的监听器,事件监听器负责处理事件。至此,实现了窗口对以下几个事件的响应:发送消息、保存消息、清空消息、查看历史消息、启动服务、关闭服务、断开连接、修改昵称。,系 统 详 细 设 计,功能函数,该段功能由ChatTookit.java文件中的ChatTookit类实现,具体实现过程如下: 函数getAllNickname:该函数实现从IP地址昵称对照哈希表中得到所有的昵称的功能,函数原

13、型如下: public static String getAllNickname(Hashtable ip2nickname) 函数sendInfoToAll:该函数实现遍历所有已连接的客户端,并且发送输入的信息的功能,函数原型如下: public static void sendInfoToAll(ArrayList onLineUsers,String info) throws IOException 函数sendInfo:该函数实现给某个特定用户发送一条信息的功能,函数原型如下: public static void sendInfo(Socket client,String info)

14、 throws IOException 函数getIP:该函数实现从socket中得到用户的ip地址的功能,函数原型如下: public static String getIP(Socket socket) 函数getIP:该函数实现从一个hashtable中根据value得到key的功能,函数原型如下: public static String getIP(Hashtable ip2nickname,String nickname),系 统 详 细 设 计,函数getNickname:该函数实现从socket和IP地址昵称对照hashtable中得到用户的昵称的功能,函数原型如下: publ

15、ic static String getNickname(Socket socket,Hashtable ip2nickname) 函数updateOnLineUsersList:该函数实现将在线用户列表的显示清空,并用最新的用户列表更新客户端的用户列表,只显示昵称,函数原型如下: public static void updateOnLineUsersList(List onLineUsersList,String allNickname) 函数updateOnLineUsersList:该函数实现将在线用户列表的显示清空,并用最新的用户列表更新服务器端的用户列表:显示的是ip:昵称,函数原

16、型如下: public static void updateOnLineUsersList(List onLineUsersList,Hashtable ip2nickname) 函数getSocketByIP:该函数实现根据用户ip地址得到该用户所在的socket功能,函数原型如下: public static Socket getSocketByIP(ArrayList onLineUsers,String ip) 函数getServiceByIP,该函数实现根据用户ip地址得到该用户所在的service功能,函数原型如下: public static Service getServiceByIP(ArrayList allService,String ip),信息处理,客户端几乎所有信息都是交给服务器的Service负责接受这些信息,并且做出相应的处理。该段功能由Service.java文件中的Service类实现,实现

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号