




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录 TOC o 1-3 h z u HYPERLINK l _Toc289285635 第1章 绪论 PAGEREF _Toc289285635 h 3 HYPERLINK l _Toc289285636 选题背景 PAGEREF _Toc289285636 h 3 HYPERLINK l _Toc289285637 目的和意义 PAGEREF _Toc289285637 h 3 HYPERLINK l _Toc289285638 第2章 系统概况 PAGEREF _Toc289285638 h 4 HYPERLINK l _Toc289285639 系统主要功能 PAGEREF _Toc2
2、89285639 h 4 HYPERLINK l _Toc289285640 系统所用技术 PAGEREF _Toc289285640 h 4 HYPERLINK l _Toc289285641 2.2.1 Java技术 PAGEREF _Toc289285641 h 4 HYPERLINK l _Toc289285642 2.2.2 TCP/IP协议 PAGEREF _Toc289285642 h 5 HYPERLINK l _Toc289285643 2.2.3 JMF使用RTP协议 PAGEREF _Toc289285643 h 5 HYPERLINK l _Toc289285644 2
3、.2.4 Mysql数据库 PAGEREF _Toc289285644 h 5 HYPERLINK l _Toc289285645 系统运行环境 PAGEREF _Toc289285645 h 6 HYPERLINK l _Toc289285646 第3章 系统分析 PAGEREF _Toc289285646 h 6 HYPERLINK l _Toc289285647 关于系统分析 PAGEREF _Toc289285647 h 6 HYPERLINK l _Toc289285648 可行性分析 PAGEREF _Toc289285648 h 6 HYPERLINK l _Toc2892856
4、49 系统功能分析 PAGEREF _Toc289285649 h 6 HYPERLINK l _Toc289285650 客户端功能分析 PAGEREF _Toc289285650 h 6 HYPERLINK l _Toc289285651 3.2.2 效劳器功能分析 PAGEREF _Toc289285651 h 7 HYPERLINK l _Toc289285652 系统流程图 PAGEREF _Toc289285652 h 7 HYPERLINK l _Toc289285653 第4章 系统设计 PAGEREF _Toc289285653 h 9 HYPERLINK l _Toc289
5、285654 数据库表设计 PAGEREF _Toc289285654 h 9 HYPERLINK l _Toc289285655 4.2 自定义XMPP协议 PAGEREF _Toc289285655 h 9 HYPERLINK l _Toc289285656 第5章 系统实现 PAGEREF _Toc289285656 h 11 HYPERLINK l _Toc289285657 5.1 客户端实现 PAGEREF _Toc289285657 h 11 HYPERLINK l _Toc289285658 5.1.1 登录界面 PAGEREF _Toc289285658 h 11 HYPER
6、LINK l _Toc289285659 5.1.2 用户列表界面 PAGEREF _Toc289285659 h 14 HYPERLINK l _Toc289285660 5.1.3 聊天窗口及视频界面 PAGEREF _Toc289285660 h 16 HYPERLINK l _Toc289285661 5.2 效劳器端实现 PAGEREF _Toc289285661 h 21 HYPERLINK l _Toc289285662 5.2.1 效劳器界面 PAGEREF _Toc289285662 h 21 HYPERLINK l _Toc289285663 第6章 结束语 PAGEREF
7、 _Toc289285663 h 22 HYPERLINK l _Toc289285664 参考文献 PAGEREF _Toc289285664 h 23多人聊天室设计摘要:在信息时代的今天,进行信息交流已成为了人们日常生活中不可缺少的事情,但是由于 话费的昂贵、发送 短信的烦琐,以及它们之间由于不及时性而造成了相应的损失;网络通信软件由于安装方便、操作简单,更重要的是它给广阔的用户提供了一个免费交流的平台,这个平台具有广域性、及时性、高效性,因此受到了许多公司、企业院校的青睐,特别是广阔青年人的追捧;本论文介绍的就是一个基于TCP/IP协议、C/S模式、利用多线程、实现点对点通信的一个多人聊
8、天室软件,可以进行私聊、群聊、视频聊天等;关键字:Java;聊天室;线程;协议;第1章 绪论随着信息时代的到来,信息的交流量也与日俱增。尽管一些通信工具,例如 ,可以通过打 或者发短信与对方进行相应的信息交流;但是对于大量的信息、长时间或者“面对面的交流, 那么不能适应。网络通信软件,正是由于它的安装方便,只需要彼此之间都有连上网的电脑,安装有相应的客户端,就可以进行信息交流;并且它可以实现与一个人与多个不同国家、地方的人进行交流,交流的过程中可以传输大量的信息资料,更加的方便快捷,也无需过多的通信费用;甚至彼此之间还可以通信视频实现“面对面 的语音聊天,提供了更加亲舒适的效劳;因此许多的公司
9、、企业及院校都有相应的网络通信软件,进行日常的信息处理。特别受青少年追捧的网络通信软件就是腾讯公司的QQ,本论文所介绍的多人聊天室就是在腾讯QQ的根底上自己制作的一个实现了相应功能的网络通信软件;1.网络通信软件可以为公司、企业及院校提供日常的信息处理效劳。可以解决信息交流中的信息量大繁多,及时性,广域性等相应的问题,为企业内部的凝聚,与外界的交流以及以后的开展带来了不可磨灭的功绩;2.网络通信软件也给用户的日常生活带了方便。用户可以通过这种通信软件找到自己的知己,并且可以和他们交流自己的知识,兴趣爱好等,也可以和自己的亲戚、朋友、同学可以在聊天室里畅所欲言;第2章 系统概况1.用户登录:用户
10、只有输入正确的用户账号、密码才有权利进入到聊天室,输入错误那么会出现相应的提示;2.聊天:用户指定相应的在线用户,输入信息,点击发送按钮,即可将信息发送给对方;3.窗口抖动:聊天时点击抖动按钮,即可使聊天对方的窗口出现一定时间的抖动效果;4.视频聊天:聊天双方在有视频的根底上,可以通过视频来进行“面对面的聊天;2.2.1 Java技术Java是Sun公司于1995年推出的程序设计语言。Java分为三个体系J2SE(Java平台标准版)、J2EE(Java平台企业版)和J2ME(Java平台微型版)。Java语言之所以开展这么迅速,主要在于它跨平台、开源,在Java里面很多工程都是开源的,就像L
11、inux一样,也可以说是开源推动了它的进一步开展。Java在现在依然是很火的一门编程语言,主要在于它有如下特点:Java语言是简单的。它相对于C或C+来说比拟简单,它丢掉了C或C+里面的指针。它是面向对象的。在Java中可以认为万事万物皆对象。Java语言是分布式的。Java语言支持Internet应用的开发,在根本的Java应用编程接口中有一个网络应用编程接口java net,它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。Java语言也是动态的。Java语言
12、的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。2.2.2 TCP/IP协议TCP/IPTransmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最根本的协议、Internet国际互联网络的根底,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP 定义了电子设备比方计算机如何连入因特网,
13、以及数据如何在它们之间传输的标准。TCP/IP是一个四层的分层体系结构。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。低层是网际协议,它处理每个包的地址局部,使这些包正确的到达目的地。在多人聊天室中那么是在这种协议根底上实现的彼此之间的信息交流;2.2.3 JMF使用RTP协议实时传输协议RTP(Real-Time Transport Protocol)是针对Internet上多媒体数据流的一个传输协议,由IETF(Internet工程任务小组)作为RFC1889发布。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP的典型应用建立在UDP上,
14、但也可以建立在TCP或ATP等其它协议之上工作。RTP本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些效劳。在多人聊天室中那么是在这种通信协议的根底上实现的视频聊天;2.2.4 Mysql数据库MySQL是一种开放源代码的关系型数据库管理系统RDBMS,MySQL数据库系统使用最常用的数据库管理语言-结构化查询语言SQL进行数据库管理。并且其速度、可靠性和适应性都非常不错,而且还有可视化的插件,便于建表和进行其它的操作。多人聊天室中利用这种数据库实现的数据保存;硬件环境:个人计算机内存1G+软件环境:Eclipse 3.3
15、 、JDK 1.6、Mysql 5.0 、Windows XP第3章 系统分析本软件在计算机语言上采用的是当前流行的Java语言,这种语言具有很好的跨平台性,可以对不同的操作系统进行兼容,只需要用户的电脑上将有SUN公司开发的JDK1.4以上的版本就可以运行该程序;编辑器利用是Eclipse,这种编辑器具有很好的提示功能,支持插件,使用相当方便;数据库利用的是Mysql,这种数据库易于安装,所占的空间少,启动快,适合在局域网;该软件只需要一台将有JDK1.4以上版本的电脑即可,经济上实惠;由于电脑技术的开展,人们素质的提高,对于电脑的根本操作和维护都有了一定的根底,因此在维护上还是不成问题;在
16、客户端我们根据软件的需要可以从它所应具有的界面个数来对它的功能进行分析;第一个 登录界面在这个界面上,有两个输入框一个是账号,一个是密码;当输入完信息之后,点击登录按钮,客户端就会开始与效劳器与行连接;在这个过程中要完成两件事情。一件是,客户端取得与效劳器的连接,如果效劳器没有开启或者网络不通,自然要给客户端一个友好的提示信息;另一件是,取得连接之后客户端将账号及密码信息发送给效劳器,以确保该用户是否存在,如果不存在那么提示账号或者密码错误,存在那么进入下一个界面,进度条那么会显示整个处理的进度情况;第二个 用户列表界面这个界面是用户成功登录之后,展现该用户自己信息及所有好友信息的界面,这是每
17、一个用户都必须有的界面,只有退出整个程序时这个界面才会消息;在这个界面上提供应用户进行操作的那么是,用户可以根据自己的喜爱选择好友列表中相应的好友,双击头像图标进行聊天;第三个 聊天窗口 这是整个多人聊天室的主要界面;这在这界面上负责将自己的消息通过兴旺信息框发送给对方,并将对方的信息显示在信息显示框内;另外这个窗口还有相应的功能按钮提供应用户一些方便的操作。例如抖动按钮,发送按钮,视频聊天选项等;点击视频聊天选项会出现相应的视频聊天窗口,点击发送按钮会将消息发送出去,点击抖动按钮会使聊天对方的聊天窗口出现一段时间的抖动;3.2.2 效劳器功能分析效劳器的主要功能那么是将客户端发送过来的信息,
18、进行验证和转发,效劳器处理的工作较多,要求性能较好;在效劳器端主要有一个界面,这个界面负责启动效劳器,并且在效劳器启动之后,会将所有存在的用户信息包括账号、密码、头像等信息显示在表格上,以方便后台的人员对用户进行相应的操作;另外所有用户发送给客户端的信息都会在信息显示框内进行显示,以便查看整个通信过程;。系统流程图展示了该系统客户端与效劳器之间的逻辑关系,其中主要介绍的是效劳器如何处理消息的一个过程,并将在下面的的系统设计阶段给出了相应的消息设计(XMPP)。 由上图可以看出,一个客户端只要能过了账号、密码的验证就可以与其它相应的客户端取得联系,进行彼此之间的交流。而效劳器为了单独处理第个客户
19、端那么利用了多线程技术,使得每个客户端的信息不至于混乱;第4章 系统设计 user 表:id整型唯一IDname字符型用户名account字符型账号password字符型密码picture字符型头像 friends 表:通过friends 表可以找到某个用户的所有朋友信息id整型唯一IDid_user字符型外键type字符型朋友类型friend_account字符型朋友账号4.2 自定义XMPP协议1-客户端与效劳器连接 a.没有连接上那么返回超时, b.连接上 密码错误那么进行提示 正确那么返回个人信息、用户列表并进入用户窗口 1-1 . 登录请求 login 账号 密码 1-2 . 登录应
20、答 login_response 1表示成功,0表示失败 1-3 . 发送个人信息 user用户名用户账号用户头像 1-4 . 发送好友队列信息-默认2个组 好友类型 好友名 好友账号 好友头像 2 . 聊天 彼此在线,好友发送消息过来时,弹出对应的聊天框 2-1. chat 本人账号 朋友账号 内容 对方不在线时,给发送者提示 2-2. line -1 不在线好友账号 3 . 抖动 点击抖动按钮那么可以让对方的聊天框出现一段时间的抖动,条件是该好友要在线 3-1. shake 发送方账号 接收方账号 4. 视频 4-1 视频请求点击开始视频按钮 vidio 发送方账号 接收方账号 发送者的i
21、p,port 4-2 视频应答点击接受按钮 r_vidio 发送方账号 接收方账号 发送者的ip,port第5章 系统实现5.1 客户端实现5.1.1 登录界面关键代码:private void creatFrame() this.setTitle(QQ2021);this.setSize(340, 250);/ 三个panel-加中一个布局管理器给图片定位JPanel pan1 = new JPanel(new java.awt.FlowLayout(0, 0, 0);JPanel pan2 = new JPanel();JPanel pan3 = new JPanel(new java.a
22、wt.FlowLayout(0, 10, 3);/ pan2上的三个jpanelJPanel pan4 = new JPanel();JPanel pan5 = new JPanel();JPanel pan6 = new JPanel();/ pan1上的标签-要标签上加一张图片JLabel lab1 = new JLabel();javax.swing.ImageIcon img1 = new javax.swing.ImageIcon(images/login1.jpg);lab1.setIcon(img1);/ 在三个jpanel上设图片和背景pan1.add(lab1);pan2.s
23、etBackground(new java.awt.Color(228, 244, 255);pan3.setBackground(new java.awt.Color(194, 255, 250);/ 设组件JLabel name_label = new JLabel(账号:);name_label.setFont(new java.awt.Font(宋体, Font.TRUETYPE_FONT, 12);text = new JTextField(15);JLabel reg_label = new JLabel( 注册账号);reg_label.setFont(new java.awt.
24、Font(宋体, Font.TRUETYPE_FONT, 12);JLabel pwd_label = new JLabel(密码:);pwd_label.setFont(new java.awt.Font(宋体, Font.TRUETYPE_FONT, 12);pwd = new JPasswordField(15);JLabel mod_label = new JLabel( 修改密码);mod_label.setFont(new java.awt.Font(宋体, Font.TRUETYPE_FONT, 12);/ 进度条JProgressBar bar = new JProgressB
25、ar();JProBar prob=new JProBar(bar);/启动进度条prob.start();bar.setBackground(Color.red);JLabel bar_label = new JLabel( );JButton set_bt = new JButton(设置);set_bt.setSize(60, 5);set_bt.setFont(new java.awt.Font(宋体, Font.TRUETYPE_FONT, 12);JLabel empty_label = new JLabel( );/ 给登录按钮、密码输入框注册侦听器JButton log_bt
26、= new JButton(登录);LoginButtonListener listener = new LoginButtonListener(this);log_bt.addActionListener(listener);pwd.addActionListener(listener);log_bt.setSize(60, 5);log_bt.setFont(new java.awt.Font(宋体, Font.TRUETYPE_FONT, 12);/ 将组件加到pan4,pan5,pan6,pan3上pan4.add(name_label);pan4.add(text);pan4.add
27、(reg_label);pan5.add(pwd_label);pan5.add(pwd);pan5.add(mod_label);pan6.add(bar);pan6.add(bar_label);pan3.add(set_bt, BorderLayout.WEST);pan3.add(empty_label, BorderLayout.CENTER);pan3.add(log_bt, BorderLayout.EAST);/ pan4,pan5,pan6加到pan2上pan2.add(pan4, BorderLayout.NORTH);pan2.add(pan5, BorderLayout
28、.CENTER);pan2.add(pan6, BorderLayout.SOUTH);/ 三个jpanel的位置 北 中this.add(pan1, BorderLayout.NORTH);this.add(pan2, BorderLayout.CENTER);this.add(pan3, BorderLayout.SOUTH);this.setDefaultCloseOperation(3);/ 关闭窗口时退出运行this.setLocationRelativeTo(null);/ 位于窗口的中间this.setVisible(true);/ 可视this.setResizable(fal
29、se);/ 设定窗口不可改变大小5.1.2 用户列表界面关键代码:private JTree getJTree0() if (jTree0 = null) jTree0 = new JTree();DefaultTreeModel treeModel = null; / 根结点DefaultMutableTreeNode root = new DefaultMutableTreeNode(好友列表);/ 根据好友列表建树/ 第一层,好友类型for (int i = 0; i 2; i+) DefaultMutableTreeNode node1 = new DefaultMutableTree
30、Node(datai0);/ 第二层,好友名字for (int j = 0; j 1; j+) DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(datai1);node1.add(node2);root.add(node1);/ 表模型treeModel = new DefaultTreeModel(root);/ 给叶节点加上图片ImageIcon image = new ImageIcon(images/163.gif);DefaultTreeCellRenderer renderer = new DefaultTreeC
31、ellRenderer();renderer.setLeafIcon(image);jTree0.setCellRenderer(renderer);/ 给节点加上双击事件jTree0.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) if (e.getClickCount() = 2) / 点击路径TreePath path = jTree0.getPathForLocation(e.getX(), e.getY();/ 根据路径得到节点TreeNode node = (TreeNode) p
32、ath.getLastPathComponent();/ 叶节点1if (node.toString().equals(data01) if (frame = null) frame = new ChatFrame(1,data,per,session);/ 叶节点2if (node.toString().equals(data11) if (frame2 = null) frame2 = new ChatFrame(2,data,per,session););jTree0.setModel(treeModel);return jTree0;5.1.3 聊天窗口及视频界面FMJ视频聊天室的实现
33、 视频聊天整体结构分析整体流程图示:效劳器和客户机通过基于UDP的RTP通信协议传输媒体流数据,在建立RTP会话之前,先建立一个Socket连接,以发送接收其它请求消息,如要发送多媒体数据的请求和应答消息。发送视频请求消息和完成应答之后,效劳器利用客户机发上来的消息建立RTP会话,因此在视频请求的消息中应包含客户机的地址、端口等消息,以供效劳器建立RTP会话。客户机也要和效劳器建立对应的RTP会话,这样,视频数据流就可以通过RTP会话传输:关键代码:/* * 本地播放的方法 * param:dataSource 要初始化的数据源 */public void playSource() try /
34、 创立一个播放器对象player = javax.media.Manager.createPlayer(dataSource);/ 创立一个播放器的控制器监听器对象MyRTPListener l = new MyRTPListener(player, ServerStart.jf,ServerStart.panel);/ 给播放器对象注册控制器监听器player.addControllerListener(l);/ 开始播放player.start(); catch (Exception e) e.printStackTrace();/* * */public synchronized voi
35、d controllerUpdate(ControllerEvent e) if (e instanceof javax.media.RealizeCompleteEvent) Component comp;/ 得到播放器的可视容器,即播放器显示视频的容器if (comp = player.getVisualComponent() != null) / 将可视容器加到窗体上panel.add(Center, comp);/ 得到播放器的控制面板容器if (comp = player.getControlPanelComponent() != null) / 添加到窗体上panel.add(So
36、uth, comp);/ 刷新窗体jf.validate(); /* * 初始化RTP会话 * * return */protected boolean initialize() try mgrs = new RTPManagersessions.length;SessionLabel session;/ 翻开会话for (int i = 0; i sessions.length; i+) / 解析会话地址try session = new SessionLabel(sessionsi); catch (IllegalArgumentException e) System.err.printl
37、n(Failed to parse the session address given: + sessionsi);return false;System.err.println( - Open RTP session for: addr: + session.addr + port: + session.port + ttl: + session.ttl);mgrsi = (RTPManager) RTPManager.newInstance();mgrsi.addSessionListener(this);mgrsi.addReceiveStreamListener(this);/ 初始化
38、 RTPManager用 RTPSocketAdaptermgrsi.initialize(new RTPSocketAdapter(InetAddress.getByName(session.addr), session.port, session.ttl);BufferControl bc = (BufferControl) mgrsi.getControl(javax.media.control.BufferControl);if (bc != null)bc.setBufferLength(350); catch (Exception e) System.err.println(Can
39、not create the RTP Session: + e.getMessage();return false;/ 等待数据到达.long then = System.currentTimeMillis();long waitingPeriod = 30000; / wait for a maximum of 30 secs.try synchronized (dataSync) while (!dataReceived& System.currentTimeMillis() - then waitingPeriod) if (!dataReceived)System.err.println( - Waiting for RTP data to arrive);dataSync.wait(1000); catch (Exception e) if (!dataReceived) System.err.println(No RTP data was received.);close();return fals
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 影视公司入股合同协议书
- 安全旅游快乐行课件
- 医疗行业远程医疗方案
- 中国充气橡胶制品项目投资计划书
- 销售公司返利合同协议书
- 诊所资金入股合同协议书
- 学校购销合同协议书范本
- 母婴护理合同协议书
- 商业用房转让合同协议书
- 早教机构创业计划书早教项目创业准备计划书
- 2025年铁路列车员(初级)职业技能鉴定参考试题库(含答案)
- 浙江省杭州市2025届高三下学期二模试题 数学 含答案
- 国资监管培训课件
- 导游证-《全国导游基础知识》历年考试真题库及答案(高频300题)
- 护士分层级培训及管理
- 2025-2030中国体声波滤波器行业市场发展趋势与前景展望战略研究报告
- 2025年中石化中原石油工程有限公司钻井工程技术研究院-企业报告(业主版)
- 仓库管理员考核试题及答案
- 食品科学与工程实践应用题集
- MDT多学科流程在康复治疗中的效益分析
- 数字化转型下的对公客户业务场景解析
评论
0/150
提交评论