您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页基于CS结构的即时通信系统的设计与实现毕业设计

基于CS结构的即时通信系统的设计与实现毕业设计

来源:意榕旅游网
沈阳理工大学

毕业设计(论文)成绩评定

学生姓名: 专业: 通信工程 学号:

题目: 基于C/S结构的即时通信系统的设计与实现 毕业设计(论文)答辩委员会(小组)评语:

答辩评分: 答辩委员会主任(组长)(签字): 年 月 日

毕业设计(论文)成绩

指导教师评分( %) 审阅评分( %) 答辩评分( %) 毕业设计(论文)成绩: (分)

毕业设计(论文)总评成绩(等级):

答辩委员会主任(签字):

年 月 日

毕业设计(论文)评语

指导教师评语: 指导教师评分: 指导教师(签字): 年 月 日 评阅人评语: 评阅人评分: 评阅人(签字): 年 月 日 毕业设计(论文)任务书

学 院 学 生 姓 名 设计(论文)题目 内容及要求: 1. 基于C/S结构即时通信系统发展现状及技术背景; 2. 基于C/S结构即时通信系统的设计; 3. 编程实现基于C/S结构即时通信系统; 4. 基于C/S结构即时通信系统测试分析; 5. 依据研究的内容撰写毕业设计论文。 信息科学与工程学院 专 业 学 号 通信工程 基于C/S结构的即时通信系统的设计与实现 进度安排: 第1~3周:搜集课题相关资料,熟悉开发工具,撰写开题报告; 第4~6周:基于C/S结构即时通信系统架构及功能设计; 第7~9周:基于C/S结构即时通信系统详细设计; 第10~12周:编程实现基于C/S结构即时通信系统; 第13周:程序调试; 第14~16周:撰写、修改、装订论文,准备答辩。 指导教师(签字): 学院院长(签字): 年 月 日 年 月 日 学生毕业设计档案

学 生 姓 名 指导教师姓名 毕业设计题目 学 院 信息科学与工程学院 学 号 职 称 副教授 所在单位 沈阳理工大学 基于C/S结构的即时通信系统的设计与实现 毕业设计(论文)完成情况 毕业设计各阶段名称 1. 搜集课题相关资料,熟悉开发工具,撰写开题报告; 2. 基于C/S结构即时通信系统架构及功能设计; 3. 基于C/S结构即时通信系统详细设计; 4. 编程实现基于C/S结构即时通信系统; 5. 程序调试; 撰写、修改、装订论文,准备答辩。 起止日期 2015.3.2——2015.3.22 2015.3.23——2015.4.12 2015.4.13——2015.4.26 2015.4.27——2015.5.24 2015.5.25——2015.6.7 2015.6.8——2015.6.21 完成情况(存在问阶段成绩* 题及整改意见) 指导 (根据学生出勤及毕业设计(论文)完成情况,指导教师是否同意该学生参加答辩) 教师 意见 指导教师(签名): 年 月 日 *注:阶段成绩分A、B、C三级: A为全面完成任务、B为完成任务、C为完成

摘 要

随着互联网的发展,越来越多的人使用即时通讯工具。即时通讯(IM)是指一种能够让使用者即时发送和接收互联网消息等的实时通讯服务。即时通讯的最大特点在于它的即时性,不用等候,只要两个人都同时在线,就能像多媒体电话一样,传送文字、档案、声音、影像给对方。只要有网络,无论对方在天涯海角,或是双方隔得多远都没有距离。因此即时通信系统在现代社会中有着非常重要的地位。

本论文详细的论述了即时通讯系统的客户端和服务器端的主要组成模块,论述各模块实现方式和详细的设计,每个模块的主要功能进行了阐述,并画出模块流程图。系统按照软件工程思想釆用面向对象和模块化设计方法设计,其中采用了网络通信技术、数据库技术、多线程技术等计算机技术,实现了文本通信、用户分组、用户管理等功能,具有通信即时性等特点。系统基于C/S体系结构,使用Java语言进行开发,实现多用户的即时通信。设计并实现了用户注册,登录,用户列表,多用户即时聊天和聊天记录管理等功能。基于Swing开发图形用户界面(GUI);通过套接字编程完成通信功能。最终实现了一款面向企业用户的在局域网使用的即时通讯系统。本系统基本实现了上述的研究,能够满足基本的通信需求。同时由于本系统采用模块化程序设计,具有良好可扩充性。

关键词:Swing编程;C/S;多线程编程;即时通信系统

Abstract

With the development of the Internet, more and more people are using instant messaging tools. IM (IM) is a way to allow users to send and receive instant messages and other Internet real-time communication services.The most important feature of instant messaging is its real time. As long as two peopleare online at the same time, you two do not have to wait and can send text, files, audio,video to each other like multimedia phones. As long as there is a network, there is no distance, regardless of how far between each other. Therefore,the real-timecommunication systems have played a very important role in modern society.

This essay analyzed the main modules of the instant messaging system's client andserver in detail,discussed the implementations of each module and detailed design ofhe main functions of each module and drew the flow diagram. This system was designed by object-oriented and modular method, which used network communicationechnology, database technology and multi-threading technology and so on. This systemimplemented functions of the text communication, user groups,and user-management,and had real-time feature. This software based on C/S using Javaprogram language, realized multi-users5 instant messaging. I have designed and carried out sign-up,sign-in, user list, multi-user instant messaging, records management and so forth. Developed graphical user interface (GUI) using Swing. Implemented communications using socket programming.Finally, An instant messaging system was implemented which is oriented the business enterprise using on LAN. The System reflects the above research results, and can meet the communication needs. And because of modular programming, the system has well extensibility.

Keywords:SwingProgramming;instantMessaging; Multi-thread Programming;Client/Server model

目 录

1 绪 论 .................................................................................................................................... 1 1.1 即时通倍系统概述和选题背景 ................................................................................... 1 1.2 选题的目的和研究意义 ............................................................................................... 2 1.3 本论文的研究方法 ....................................................................................................... 3 1.4 本论文的内容 ............................................................................................................... 3 2 主要技术介绍 ...................................................................................................................... 5 2.1 开发环境介绍 ............................................................................................................... 5 2.1.1 Java语言的产生与发展简介 ................................................................................. 5 2.1.2 Java语言的主要特点 ............................................................................................. 5 2.1.3 Java web和struts2技术 ........................................................................................ 6 2.1.4 MyEcIipse ............................................................................................................... 7 2.2 Swing 编程 ................................................................................................................... 7 2.3 多线程编程 ................................................................................................................... 7 2.4 MySQL数据库简介 ..................................................................................................... 8 2.5 即时通讯系统原理 ....................................................................................................... 8 2.5.1 套接字通信 ............................................................................................................. 9 2.5.2 数据报通信 ............................................................................................................. 9 2.6 系统的主要架构 ........................................................................................................... 9 2.7 TCP/IP 协议 ............................................................................................................... 10 3 即时通信系统分析 ............................................................................................................ 12 3.1 系统基本功能描述 ..................................................................................................... 12 3.2 可行性分析 ................................................................................................................. 12 3.3 系统需求分析 ............................................................................................................. 12 4 即时通信系统设计 ............................................................................................................ 15 4.1 数据库设计 ................................................................................................................. 15 4.2 系统模块设计 ............................................................................................................. 15

4.2.1 聊天系统工作原理图 ........................................................................................... 15 4.2.2 系统功能模块图: ............................................................................................... 16 4.2.3 系统用例图 ........................................................................................................... 17 4.2.4 活动图 ................................................................................................................... 18 4.3 系统类设计 ................................................................................................................. 19 4.3.1 Message类的设计: ............................................................................................ 19 4.3.2 截图类的设计: ................................................................................................... 21 4.3.3 聊天记录类的设计: ........................................................................................... 21 4.3.4 服务端线程的设计: ........................................................................................... 22 5 即时通信系统实现 ............................................................................................................ 23 5.1 实现概况 ..................................................................................................................... 23 5.2 注册模块 ..................................................................................................................... 23 5.2.1 流程图 ................................................................................................................... 23 5.2.2 关键代码 ............................................................................................................... 24 5.3 登录模块 ..................................................................................................................... 25 5.3.1 流程图 ................................................................................................................... 25 5.3.2 关键代码 ............................................................................................................... 26 5.4 聊天模块 ..................................................................................................................... 30 5.4.1 流程图 ................................................................................................................... 30 5.4.2 关键代码 ............................................................................................................... 31 5.5 文件模块 ..................................................................................................................... 35 5.5.1 流程图 ................................................................................................................... 35 5.5.2 关键代码 ............................................................................................................... 36 5.6 用户管理模块 ............................................................................................................. 41 5.6.1 流程图 ................................................................................................................... 41 5.6.2 关键代码 ............................................................................................................... 42 5.7 其他功能的实现 ......................................................................................................... 45 5.7.1 截图功能的实现 ................................................................................................... 45

5.7.2 聊天记录功能的实现 ........................................................................................... 46 5.7.3 服务端线程的实现 ............................................................................................... 48 5.8 用户界面的设计 ......................................................................................................... 48 5.8.1 登陆界面 ............................................................................................................... 48 5.8.2 好友列表 ............................................................................................................... 49 5.8.3 聊天界面 ............................................................................................................... 50 结 论 ........................................................................................................................................ 51 致 谢 ........................................................................................................................................ 52 参考文献 .................................................................................................................................. 53 附录A 英文原文 .................................................................................................................. 55 附录B 汉语翻译 .................................................................................................................. 62

1 绪 论

1.1 即时通倍系统概述和选题背景

即时通信(Instant Messaging,缩写为IM),是以万维网为基础,实现通信双方语言、文件、语音等实时信息传送的通信过程[1]。与Email等传统的通信方式相比,即时通信具有实时、方便、快捷、廉价、交互性好等优点。

当今社会是一个信息化的社会,个人化的交流要求越来越高。同时,随着多媒体计算机技术和通信技术的迅猛发展,人们已经不能满足于简单的话音和文字通信,希望集语音、文字和图像于一体的多媒体通信[2-4]。

即时通信技术自从1996年诞生以来,经历了 10余年的发展,已经从最初的简单的文字聊天通信工具,发展成为一个集通信和娱乐统一于一体的广泛平台。在这个平台上,除了可以进行最基本的实时通信(包括文字通信,还有视频通信和语音通信)之外,还可以进行游戏的娱乐项目,甚至可以进入一个虚拟的世界、一个虚拟的现实。

现在著名的即时通信软件有QQ,Google Talk, Yahoo Messager,微信,飞信,Line, Skype等,这些即时通信系统在提供即时通信基本功能的基础上,各自有自己的特点。如飞信可以免费发送短信到好友的手机;Google talk的聊天记录是以邮件的形式保存在Google mail的邮箱里面[5]。而且除了实现PC与PC、手机与手机的通讯之外,还可以实现手机与PC之间的通信。

但是这些优秀的即时通讯软件的使用必须有一个前提条件:必须保证因特网的畅通。如果因特网不畅通,那么这些软件都不能正常的使用,而且很多的即时通讯软件只能在Windows平台下运行,不能在Linux、Mac OS上跨平台运行,除了个别的几个工具之外,也不能再移动平台上运行。

随着时代的发展,互联网时代的到来,人们的沟通交流方式也变得越来越丰富,如Email、BBS、即时通讯软件、微博、移动终端等。但是就在个人通信方式方兴未艾的时候,企事业内部交流通信却显得比较的尴尬,很多的企事业单位内部之间的工作沟通使用的市场上现有的个人即时通讯工具,部门同事之间相互加为好友,部门与部门之间建立一个又一个的群,这种方式貌似很方便同事之间的工作沟通。本人的QQ就加入了十几个群,个人的各种好友有近百人,我的同学中有的加入几十个群,各种好友有数百人之多。每天一打开通信软件,就会弹出各个群的信息,很多好友的信息,每天的交流沟通占去了很多很多的时间,工作效率低下。 发出一款能在企事业单位内部使用的、进

1

行工作沟通交流的即时通讯软件,使得我们能在上班的时候免受工作之外的各种信息的干扰,提高我们的沟通质量,提升人们的沟通体验,就显得非常必要。而且人们也越来越关注一个问题,那就是安全保密。如何能在因特网不畅通的时候进行实时通信,如何保证个人信息的安全性,如何保证企业单位内部信息安全性,如何使得软件能够跨平台(不仅是PC平台之间,也包括PC和移动终端之间)使用,正是本论文的研究所在。

1.2 选题的目的和研究意义

现代社会的信息越来越发达,生活节奏也越来越快,于是新型的省时,省力而又高速便捷美观的即时通讯工具迅速发展起来。例如手机即时通讯和PC即时通讯,手机即时通讯的代表就是短信;而网站、视频即时通讯有:米聊、YY语音、QQ、MSN、百度hi、新浪UC、阿里旺旺、网易泡泡、网易CC、盛大ET、移动飞信、企业飞信等应用形式。尽管有这么多的通讯形式,但并不是都很完美,每种形式各有优劣。所以期待能用Java语言编程改善和解决一些问题,进一步提升即时通讯的功用。

在信息化时代,作为人们使用最多的,与日常生活最为密切的即时通讯工具,就成了人与人之间进行信息交流,感情传递的主要方式。然而,以传统的QQ为代表的即时通讯工具过多的侧重于娱乐性,不能够适用于高效严谨的办公环境,它不仅影响员工的工作效率,而且使得企业的内部的资源信息存在着较大的安全隐患。因此,开发出一款能够适应办公环境,企业急需,方便高效的,又安全可靠的即时通讯工具就显得比较的紧迫,比较具有现实意义。

通过研究开发出一款适合于企事业单位使用的即时通讯软件。本系统具有如下的特点:

(1)由于减少了工作之外的因素的干扰,工作效率大大的提高,沟通体验得到了提升。

(2)能够很快捷方便的获知对方是否在线。

(3)由于交流通信使用的内部的即时通讯软件,所以能够很好的保护信息的安全。 (4)系统应用之后,使得沟通的渠道通畅,交流实现扁平化,避免了过去传达汇报的传统交流沟通方式,使得沟通交流更加的有效。

(5)由于采用C/S架构,所有的信息都是通过服务器转发,很方便的查询历史记录。 本系统釆用模块化程序设计,系统具有良好可扩充性,可以在后续的开发中添加移动通信模块、电子邮件模块和视频通信模块,为系统的继续完善奠定了良好的基础。

2

1.3 本论文的研究方法

本文的设计目标是一个实用的面向企业的局域网即时通讯软件。首先对系统的可行性进行分析,确定了系统开发可行。然后经过需求分析确定了系统最终要实现的功能,确定了本系统所使用的后台数据库系统为MySQL,并对系统中的数据库进行了设计。

系统釆用目前最为流行的开发工具Java语言进行开发。其中,网络通信部分采用流行的TCP/IP协议,程序采用典型的C/S(客户端/服务器)模式,这是传统的软件系统体系结构,能够将任务合理的分配的Client端(即客户端)和Server端(即服务器端),可以大大的降低系统的通讯开销,可以充分的利用C/S两端的硬件环境的优势。程序采用的是使用Socket套接字进行网络通讯模块设计,界面部分采用Swing轻量级控件,能够是系统的控件在各个平台上具有完全相同的界面,达到了很好的互通性。系统釆用模块化设计,釆用自顶向下的开发模式。开发过程中先根据功能将系统划分成不同的模块,然后将各个模块继续细化,划分成更小的子模块。模块化的好处是便于开发,便于调试,便于系统的后期维护,并为后续的开发预留接口,使得系统具有良好的可扩充性。

本文最终设计出一个简易而实用的网络即时通讯软件,模式又分为服务器和客户端两部分:客户端通过输入服务器端的IP地址与服务器建立通信。考虑到要可以在局域网中应用,本系统使用的是第二种方法,经过设置,在局域网或internet上都可以使用。

1.4 本论文的内容

第一章绪论。系统的介绍了课题的选题背景,课题研究的意义,所釆用的研究方法以及本论文的结构。

第二章主要内容介绍。详细的介绍了本系统所涉及到的即时通信的原理。包括即时通信系统的定义TCP/IP协议。介绍了本系统所涉及的JAVA编程技术。包括套接字编程,多线程编程技术,Swing轻量级图形用户界面开发,系统开发的C/S架构等。介绍了数据库操作的MySQL语言。

第三章系统分析。首先从技术可行性、经济可行性和操作可行性方面讨论了系统的可行性。然后通过需求分析确定了系统所要实现的基本功能。

第四章系统设计。确定了系统的总体框架,服务器端和客户端的详细功能和界面,并且确定了系统的数据库。

3

第五章系统实现。重点介绍了系统的服务器端和客户端的实现。

最后是结语和致谢。对整个发过程做出了全面的回顾,并系统的进一步改进和完善提出自己的意见。

4

2 主要技术介绍

2.1 开发环境介绍

2.1.1 Java语言的产生与发展简介

Java 是 James Gosling 领导的 Green 小组在 Sun Microsystems 公司开发的,1995年更名为Java ,并重新设计,用于开发Internet应用程序。近年来,Java变得非常流行,显示出独特的魅力:跨平台、动态的Web、Internet计算。Java被广泛接受并推动了 Web的迅速发展,同时Java技术也不断更新。

Java是一个由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Application Programming Interface>简称API)构成的完整平台,有一个庞大的类库,其中包含很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾回收等服务的执行环境。Java的内容体系主要有:Java应用程序、Applet 小应用程序、JSP/Servlet、Java Bean、EJB、JavaME、JavaEE 等[6]。迄今为止,Java语言已作为一门综合性技术在众多领域得到发展和应用。 2.1.2 Java语言的主要特点

Java是面向对象的、简单的、分布式的、解释型的、健壮的、安全的、结构中立的、可移植的、高性能的、多线程的和动态的[7]。

(1) Java语言是面向对象的程序设计语言。Java是一个纯粹面向对象的语言,强调的面向对象的特性,具备继承、封装及多态性,对软件工程技术能够提供很强的支持[8]。为了简单起见,Java语言只支持类之间的单继承,但支持接口之间的多继承。另外Java全面支持动态绑定。

(2) Java语言是简单的。Java在设计的时候尽可能地接近C/C++,但是剔除了C++中很少使用的、难以理解的、易混淆的特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动垃圾回收机制[9]。总之,Java语法好比C++语法的一个“纯净”版本。Java简单性的另一方面是小。

(3) Java语言是分布式的。从诞生起,Java就与网络联系在一起,它强调网络特性,内置TCP/IP、HTTP、FTP协议类库,Java应用程序能过通过URL打开和访问网络上

5

的对象,其便利程度如同访问本地文件系统一样。另外,Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

(4) Java语言是解释型的。Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。

(5)Java语言是健壮的。Java通过强类型机制、异常处理、垃圾的自动收集等机制来保证Java程序的健壮性。Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。Java的安全检查机制使得Java更具健壮性。

(6) Java语言是安全的。Java程序在语言定义阶段、字节码检查阶段及程序执行阶段进行的三级代码安全检查机制,对参数类型匹配、对象访问权限、内存回收、Java小应用程序的正确使用等都进行了严格的检查和控制,可以有效地防止非法代码的入侵,阻止对内存的越权访问,能够避免病毒的侵害。

(7) Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),只要有Java运行时系统,这种字节码不仅可以很容易地在任何机器上被解释执行,而且还可以迅速地翻译成本地机器的代码。

(8) Java语言是可移植的。与C/C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关算法都做了明确的说明。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。

(9)Java是高性能的。Java采用JIT编译器(即时编译器),而即时编译器的基本工作方式是一次把字节码编译为本地代码,并将结果缓存起来,在需要的时候重新调用,由于这种方式只需要进行一次解释,从而极大地提高了常用代码的运行速度。

(10)Java语言是多线程的。只要操作系统支持,Java中的线程就可以利用多个处理器。在不同的机器上,只是调用多线程的代码完全相同,Java把多线程的实现交给了底层的操作系统或线程库来完成。

(11)Java语言是动态的。Java执行代码是在运行时动态载入的。在网络环境下,Java语言编写的代码用于客户端架构可减少维护工作。另外,类库中增加的新方法和其他实例不会影响到原有程序的运行。 2.1.3 Java web和struts2技术

6

采用B/S的结构实现服务器端,对用户和在线用户进行增删改查,和踢用户下线,以及开启服务器和关闭服务器。客户端采用C/S结构,管理端采用B/S的结构,用Tomcat 作为服务器,MySQL作为数据库,还使用到了WindowBuilder开源框架进行界面开发。 2.1.4 MyEcIipse

MyEclipse 企业级工作平台(MyEcIipse Enterprise Workbench,简称 MyEcIipse )是对Eclipse IDE的扩展,集成了从J2EE到各种轻量级的框架(Struts,Spring,Hibemate等等),有利于程序的一体化开发。简单而言,MyEcIipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错,完整支持 HTML,Stmts,JSF,CSS,Javascript,MySQL,Hibernate。

2.2 Swing 编程

javax.swing包在图形界面设计上比AWT更丰富,更美观。Swing拥有4倍于AWT的用户界面组件,他是在AWT包的基础上的扩展。本系统中大量使用了Swing组件编程。本系统用到的Swing组件有面板(JPanel)、滚动窗口(JscrollPane)、选项板(JTabbedPane)、按钮(JButton)、组合框(JComboBox)、标签(JLabel)、表格(JTable)、文本域(JTextField)、文本区域(JTextArea)。

其中文本域(JTextField)是用来输入或显示字符串的Swing组件[12],文本区域(JTextArea)可以让用户输入多行文本的Swing组件[12]。

2.3 多线程编程

多任务处理有两种截然不同的类型:基于进程的和基于线程的。进程是程序的一次动态执行,对应了从代码加载、执行至执行完毕的一个完整过程。一个进程中既包括所要执行的指令,也包括执行指令所需的任何系统资源,如CPU、内存空间、I/O端口等,不同进程所占用的系统资源相对。因此,基于进程的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。线程是进程执行过程中产生的多条执行线索,是比进程更小的执行单位,必须栖身于某一进程之中,有进程触发执行。基于进程的多任务处理的特点是一个程序可以同时执行两个或多个任务的功能。

7

多线程程序比多进程程序需要更少的系统开销。在创建或撤销进程时,系统都要为之创建和回收进程控制块,分配或回收资源,如内存空间和I/O设备,系统所付出的开销明显大于创建或撤销时的开销。在进程切换时,涉及到当前进程CPU环境的保存及新被调度运行进程的CPU环境的设置,而线程的切换则仅需保存和设置少量寄存器内容,不涉及存储管理方面的操作[8]。因此线程间的切换也是低开销的。

Java支持内置多线程编程。在本系统中,设置后台线程处理服务器和客户程序的通信。服务器资源以轻量级的线程提供,和多个客户线程并发连接通信。这样可以减轻服务器端的开销,同时保证了多个用户端连接能够得到快速而高效的服务[9]。

2.4 MySQL数据库简介

MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,MySQL是最佳的选择,而且由于MySQL是开放源代码的软件,因此,可以大大降低总体的拥有成本。目前,在Internet上所流行的主要网站的构架方式是LAMP(Linux+Apache+MySQL+PHP/Perl/Python)和LNMP(Linux+Nginx+MySQL+php/perl/Python),即使用Linux作为操作系统,Apache和Nginx作为Web服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统。

2.5 即时通讯系统原理

Java支持流套接字和数据报套接字。流套接字(stream socket)使用传输控制协议(TCP)进行数据传输,而数据报套接字使用用户数据报协议(UDP)[10]。

8

2.5.1 套接字通信

网络程序设计通常涉及一个服务器和一个或多个客户端。客户端向服务器发送请求,服务器响应请求。客户端从尝试建立与服务器连接开始,服务器可能接受或拒绝连接。一旦建立连接,客户端和服务器端就可以通过套接字进行通信。套接字(Socket)是两个主机之间逻辑连接的端点,用来实现客户方和服务方的连接。

Java对套接字通信的处理非常类似于对输入输出操作的处理,因此,程序对套接字读写就像对文件中读写数据一样容易。套接字分为服务器端套接字、客户端套接字。首先创建一个服务器,这需要创建一个服务器套接字server socket,在创建服务器套接字之后,服务器使用下列语句监听连接:

Socket socket = ServerSocket .accept(); 客户端执行下列语句请求与服务器进行连接:

Socket socket = new Socket (serverName,port); 当服务器和客户端建立连接后就可以进行通信了。

由于本系统存在单个服务程序与多个客户程序通信的可能,所以服务程序要响应客户程序不应该花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通信的建立,然而服务器程序和客户程序的会话可能很长,因此,为加快对客户程序连接请求的响应,比较好的解决方法是服务器主机运行一个后台线程,这个后台线程处理服务器和客户端程序的通信。而客户端只要能够顺序处理服务器程序的响应就可以了,因此客户端程序通常不使用多线程。 2.5.2 数据报通信

数据报是一种无连接的通信方式,它的速度比较快,但是由于不建立连接,不能保证所有数据都能到达目的地[6]。所有一般用于传送非关键性的数据。发送和接收数据报需要使用Java类库中的DatagramPacket类和DatagramSocket类。

2.6 系统的主要架构

基于C/S的体系架构:C/S架构,即Client/Server(客户机/服务器)结构,是传统的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开

9

销,可以充分利用两端硬件环境的优势。客户端用于用户的注册、登录、通讯,而服务器端用来接收用户注册信息、验证登录信息以及转发用户之间相互通讯的信息。

B/S结构(Browser/Server结构)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。

在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。

特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、速度快、效果优。

2.7 TCP/IP 协议

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议),是Internet最基本的协议、Internet国际互联网的基础,主要的组成部分是网络层的IP协议族和传输层的TCP协议族。TCP/IP协议定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了 4层的层级结构:网络接口层、网络层、传输层、应用层。

10

应用层

应用进程 应用进程 应用进程 应用进程 传输层 网络层 TCP UDP ICMP IP IGMP ARP RARP 网络接口层 网络接口 图2-1 TCP/IP协议体系结构

网络接口层:提供了 TCP/IP与各种物理网络(局域网、广域网等)的接口,并为网络层提供服务。

网络层:主要功能是管理Internet地址、路由选择、数据的分片和重组。这一层解决了计算机之间的通信问题,该层的协议统称为IP协议。

传输层:主要功能是为Internet提供可靠地传输控制,主要的协议包括TCP协议和UDP协议。

应用层:提供各种应用服务,例如HTTP、SMTP、FTP等协议。每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:IP协议是给因特网上的每一台电脑提供一个IP地址,保证网络是畅通的,但是不能保证发送的数据都能到达指定的目标IP,即不能保证数据传输的可靠性[15]。而TCP协议则解决了数据传输可靠性的问题。它负责发现传输的问题,一旦发现传输过程中有数据包丢失就会发出信号,自动要求将丢失的数据重新传输,直到所有数据安全正确地传输到目的地,并且能够调整接收到的数据包,恢复数据到原来分片之前的顺序。

11

3 即时通信系统分析

3.1 系统基本功能描述

客户端可以实现注册,即时聊天,相互之间收发文件,发送截图,查看历史聊天记录等功能。收发消息时,可以实现离线接收。

服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。

在后台管理系统,可以到对用户进行增删改查,查看在线用户,和踢用户下线。

3.2 可行性分析

本系统的可行性分析包括以下几个方面的内容: (1)技术可行性

使用Swing 和socket技术,可以很轻松地开发出实用、简便、高效的基于网络的即时通讯系统。因此技术上是可以实现的。

(2)经济可行性

计算机网络已经普及,因此在网络设备上不需要进行大的投入。本系统需要一个MySQL数据库服务器,由于并发使用人数比较少,tomcat可以作为web服务器,所以成本很低。

(3)操作可行性

只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以操作上完全不存在问题。如果要实现internet上通讯,只需要将服务器端运行在一个有固定IP的公网上就可以。

综上所述,即时Java即时通讯系统是可行的。 3.3 系统需求分析

功能分析:

本系统要实现的功能如下:

12

(1)注册

服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢称,性别,籍贯,个人资料等,接受完毕后,便通过JDBC与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其号码。客户收到服务器返回的信息后,便打开窗口登录。

(2)登录

在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JDBC读取数据库,然后与用户输入的信息进行比对,如果成功,便打开主程序窗口。然后客户向服务器请求读取好友名单,服务器收到该请求,从数据库中取出好友列表,然后向客户端发送这些信息,客户收到后就在主窗口显示好友。

(3)聊天

客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。例如服务器接收到一个A发给B的消息,先判断B是否已经在线,如果在线就将信息发送过去。如果B不在线则把信息储存在服务器,等B上线了在发送给他。B接收到A发来的信息,如果是未建立对话窗口,则自动打开显示。

(4)发送截图

客户端A点击截图按钮,将屏幕锁定,截取图片,将图片储存在byte[]数组中发送到服务器端。服务器端根据发送人信息和接收者信息来转发。B接收到A发来的截图信息,会根据byte[]构造图片,将图片显示出来。同样,如果是未建立对话窗口,则自动打开显示。

(5)发送文件

客户端A点击发送文件按键,从本地选择文件,将文件在byte[]数组中分批次发送到服务器端。服务器端根据发送人信息和接收者信息来转发。B接收到A发来的文件信息,会根据文件发送的状态和byte[]构造文件[13-14]。

(6)日志

客户端发送和接收到的信息都会储存在文本文档中。默认储存在C盘下面,会以用户的登录账号为名。

(7)对用户的操作

管理员通过B/S的系统对用户进行增加,修改,删除,查找等操作,对系统进行

13

维护。

(8)在线用户的操作

管理员通过B/S的系统对在线用户操作,可以踢用户下线。

14

4 即时通信系统设计

4.1 数据库设计

本系统中所涉及的主要实体及其属性有:用户(用户账号,用户名,密码,个性签名,头像ID,年龄,性别)。

E-R模型如图所示

Name password account User sex age

图4-1 系统实体及其属性

signature Profileld 表4-1 User

字段名 account name password signature profileID age sex

数据类型 int(6) varchar(20) varchar(20) Varchar(255) int(2) int(3) sex char(2)

字段说明 ID 用户名称 用户密码 签名 头像ID 年龄 性别

键引用 PK

备注

主键(自动增一) 非空 非空

4.2 系统模块设计

4.2.1 聊天系统工作原理图

15

服务器 Socket(TCP) Socker(TCP) Socker(TCP)

…….

图4-2 系统工作原理

客户 客户 客户 4.2.2 系统功能模块图:

JAVA聊天系统 注册 登录模块 文件模块 聊天模 块 用户管理模块 文件接收 文件发送 发送文字 发 送 图 片查找用户 在线用户管理 删除用户 增加用户 修改用户 查看在线用户 踢用户下线 图4-3 系统模块

16

4.2.3 系统用例图

普通用户的用例图: 文件 发送文件 用户 聊天 登录 文字 注册 uses uses 图片 uses uses 接收文件 图4-4 普通用户用例图

后台管理员的用例图: 管理员 查看在线用户 踢用户下线 删除用户 查找用户 登录 增加用户 修改用户 图4-5 后台用户用例图

17

4.2.4 活动图

(1)用户登陆活动图

首先填写登录信息,提交以后服务器会对用户名和密码进行验证。如果不正确,返回一个提示信息。如果登陆成功,就更新在线状态。通知所有好友自己已经上线。服务器再检查是否有他的离线消息,如果有这立即发送给用户。

填写登录信息 登录请求 登录请求(失败) 客户机 服务器 校验身份 身份不符 创建拒绝登录 返回在线好友 更新在线状态 登录请求(成功) 创建登录成功消息 向在线好友发布上 好友离线消息 图4-6 用户登录活动图 18

创建离线消息 消除离线消息记录

(2)发送消息活动图

短消息发送以后,服务器端对应的监听线程会接收到一个数据包。此包中包含接收者的信息,如果接收者在线,数据包将会转发到接收者[17]。如果不在线,存在服务器端,等它上线在发送。

网络故障 图4-7 发送消息活动图 接收短信 短信(发送失败) 监听端口 写入离线消息库 发送短信 短信 填写短信内容 客户机 客户机 服务器 对方已离线则发往服务器 成功发送 监听端口 4.3 系统类设计

4.3.1 Message类的设计:

客户端和服务器端通信时,发送的都是Message类的对象,因此Message类的设计很重要。

19

表4-2 Message

属性名

private Integer msgType; private String content; private Integer senderAccount; private Integer receiverAccount; private String time; private User myself; private List friends; private transient Image img; private byte[] imageByte; private String fileName; private byte[] fileByte;

作用 信息类型 信息的文本内容 发送者account 接收者account 发送时间

自己本身对象,用与好友列表头 好友列表

图片对象(不传送) 图片的内容 文件名称 文件的长度

private int length;//文件长度,以KB为单位 文件的内容 private int state;

文件传输的状态:

0是不接受文件,1是接受文件,2请求发送文件,3文件传输中,4文件传送完成

private Integer msgType消息的类型有这么几种:

public interface MessageType {

Integer message_succeed=1;//表明是登陆成功 Integer message_login_fail=2;//表明登录失败 Integer message_comm_mes=3;//普通信息包

Integer message_get_onLineFriend=4;//要求在线好友的包 Integer message_ret_onLineFriend=5;//返回在线好友的包 Integer message_offline=6;//下线通知包 Integer message_img=7;//图片包

20

}

Integer message_file=8;//文件包

4.3.2 截图类的设计:

截图类的实现类为:

class Screenshot extends JFrame implements MouseListener,MouseMotionListener。

JFrame

Screenshot 监听各种鼠标动作 MouseListener +mouseDragged(in MouseEvente) MouseMotion +mouseClicked(in MouseEvente) Listener +mousePressed(in MouseEvente) 图4-8 Screenshot类

截图类的核心是JDK中:Robot类中createScreenCapture(Rectangle screenRect) 创建包含从屏幕中读取的像素的图像。

先用截取全部屏幕的图片,然后显示出来,覆盖住整个屏幕。然后监听鼠标事件,再用createScreenCapture(Rectangle screenRect)方法截图。

双击表示截图成功,右键表示取消截图。 4.3.3 聊天记录类的设计:

记录日志的功能被封装在MessageRecord类中,所在包为com.im.client.record,在发送或接受到数据后,将其写入日志文件。

21

MessageRecord ClientConnToServerThred afterSend:记录发出数据 Thread afterreceive:记录接收到的数据 +afterSend(in o:Object) +run() +send(in o:Object) +afterREceive(in 图4-9 MessageRecord类

如果是图片则显示出,发送时间和图片大小。如果是文件则显示出请求发送时间,同意接收时间,接收完成时间,和文件大小。 4.3.4 服务端线程的设计:

服务器端的核心是对应客户的线程,每个socket对应一个线程,也就是每一个客户端都在服务器端有一个相应的线程。它负责转发客户端发来的消息。

线程类为ClientThread:

表4-3 ClientThread类

属性名 public void notifyOnline()

作用

通知其他线程,自己上线了,让客户方更新头像

public void run() public void notifyOffline(){

线程的主题,转发消息

通知其他线程,自己下线了,让客户方更新头像

public void send(Object o) public Object receive()

发送消息 接收消息

22

5 即时通信系统实现

5.1 实现概况

本系统可分为登录、聊天、文件、用户管理和注册五个功能模块。“登录”模块为用户提供登录界面,并在用户登录显示好友列表;“聊天”模块实现用户的即时传送信息,即多用户即时聊天,可以发送文字或者截图;“文件”模块主要实现一用户向另一用户发送文件,对方可以选择接受或者拒绝。聊天记录会以文本文档格式保存。“用户管理”模块即管理员对用户进行增删改查,和踢用户下线的操作。

下面详细介绍各个模块的具体实现。

5.2 注册模块

5.2.1 流程图

图5-1 用户注册流程图

结束 显示帐号 存入数据库 填写用户信息 开始

23

5.2.2 关键代码

注册的前台页面是showDetail.jsp,后台是UserAction类,UserAction类中有方法: public String saveOrUpdate(){ }

us.saveOrUpdate(user); return \"refresh\";

saveOrUpdate则是用到了Userservice里面的方法: public void saveOrUpdate(User u){ }

System.out.println(\"u.getAccount()=\"+u.getAccount()); if(u.getAccount()==null)

ud.save(u);

else ud.update(u);

DAO类中的方法: public void save(User u){ conn=getConnection(); try {

ps=conn.prepareStatement(SAVE); ps.setString(1, u.getName()); ps.setString(2, u.getPassword()); ps.setString(3, u.getSignature()); ps.setInt(4, 1); ps.setInt(5, u.getAge()); ps.setString(6, u.getSex()); ps.execute();

} catch (SQLException e) {

// TODO Auto-generated catch block e.printStackTrace();

}finally{

24

}

close();

}

网页上显示用户的account

图5-2用户注册信息

5.3 登录模块

5.3.1 流程图

25

接收离线信息 开始 填写用户信息 验证用户信息 成功 验证用户信息 失败 发送登录失败信息 结束 图5-3登录流程图

5.3.2 关键代码

1)客户端代码

登录事件是定义在class IMClientLogin extends JFrame 这个类的监听事件中。登录成功后,立即向服务器请求自己的好友列表。

//登录事件

login.addActionListener(new ActionListener() {

26

public void actionPerformed(ActionEvent e) {

cus=new IMClientUserServer(); System.out.println(cus.getServer()); User u=new User();

u.setAccount(Integer.parseInt(account.getText().trim())); u.setPassword(new String(passwordField.getPassword())); 登陆成功

if(cus.checkLogin(u)){

// //

//

//向服务器发送数据包,请求在线人得信息

}

ClientConnToServerThread t=Manager.THREAD; Message m=new Message();

m.setMsgType(MessageType.message_get_onLineFriend); m.setSenderAccount(u.getAccount()); try {

t.send(m);

} catch (IOException e1) { } dispose();

e1.printStackTrace();

else

JOptionPane.showMessageDialog(null, \"用户名或密码错误\

错误\_MESSAGE);

};

}

登录逻辑是在public class IMClientUserServer 里面,认证成功者就会新建一个线程,专门负责接收服务器端发来的信息class ClientConnToServerThread extends Thread 。

public boolean checkLogin(Object o) {

27

boolean success=false;

Message msg=(Message) server.sendLoginInfo(o); System.out.println(msg.getMsgType());

System.out.println(MessageType.message_succeed);

if(msg.getMsgType().intValue()==MessageType.message_succeed.intValue()){ }

return success; success=true; User u=(User) o;

//将好友列表放到管理器中,进行上下线操作

// // }

IMFriendList fl=new IMFriendList(msg.getMyself(),msg.getFriends()); Manager.FRIEND_LIST=fl;

//开启客户线程 ,接收服务器端的信息

connThread =new ClientConnToServerThread(server.getSocket()); connThread.setSocket(server.getSocket()); connThread.start();

connThread.setName(u.getAccount()+\"\"); Manager.THREAD=connThread;

客户端通过public class IMClientServer 类与服务器通信 public Object sendLoginInfo(Object o) {

try {

ObjectOutputStream oos = new

ObjectOutputStream(socket.getOutputStream());

oos.writeObject(o); ObjectInputStream ois = new

ObjectInputStream(socket.getInputStream());

Message ms = (Message) ois.readObject(); return ms;

} catch (IOException e) {

28

}

e.printStackTrace();

} catch (ClassNotFoundException e) { } return null;

e.printStackTrace();

这样按照MVC的模式设计,减小系统的耦合。 2)服务端代码

服务器端接收用户验证信息的代码被写在了一个线程public class ServerThread extends Thread中,这样服务器就可以不停的监听端口,接收来自不同客户端的请求,建立socket连接,也不会堵塞在主线程当中[20]。

从数据库中搜索用户,看是否存在

public boolean checkLogin(User u){ }

如果验证成功,查找是否有他的离线消息,有就发送给他。然后在服务器上专门开启一个针对当前用户的线程,并且吧线程放入管理类中,便于日后的管理。

if (checkLogin(u)) {

// 返回一个成功登陆的信息报

User user=ud.findById(u.getAccount()); if(user!=null){ }

return false;

return user.getPassword().equals(u.getPassword());

User myself=ud.findById(u.getAccount());

m.setMsgType(MessageType.message_succeed); m.setMyself(myself);

m.setFriends(ud.findAll());//好友列表 oos.writeObject(m); //为用户单独创建线程

29

ClientThread t=new ClientThread(s); //查看是否有离线消息 LinkedList

list=OffLineMsgManager.get(u.getAccount());

if(list!=null){ }

//开启线程 t.start();

t.setName(u.getAccount()+\"\"); //把用户线程放入管理类中

ClientThreadManager.addClientThread(u.getAccount(), t); //通知其他的用户 t.notifyOnline();

System.out.println(\" 成功\");

for(Message msg:list){ } list.clear();

t.send(msg);

} else { }

m.setMsgType(3); oos.writeObject(m);

System.out.println(\" 失败\"); // 关闭Socket s.close();

5.4 聊天模块

5.4.1 流程图

30

图5-4 聊天流程图 结束 发送数据 显示数据 输入数据 接收数据 打开聊天窗口 开始 5.4.2 关键代码

1)客服端代码 发送文字信息:

客户端发送和显示信息的代码被封装在了IMChat extends JFrame implements ActionListener类中,其中发送文字信息的代码[18]。

//点击的如果是发送button

if (e.getSource() == confirmButton) {

Message m=(Message)

makePackage(MessageType.message_comm_mes,null);

//发送

sendMessage(m);

31

//在自己的Ouput上显示

showMessage(m,Color.BLACK); //清空输入

input_textArea.setText(\"\");

}

当用户点击发送按钮后,先把先把信息显示在自己的聊天窗口上,后方发送信息,自己发送的信息和接收到的信息用不同的颜色显示。

显示文字信息,显示在JtextPane控件中

SimpleAttributeSet attrset = new SimpleAttributeSet();

StyleConstants.setForeground(attrset,c); Document docs = output_pane.getDocument();

// 利用getDocument()方法取得JTextPane的Document

//一般信息

if(m.getMsgType().intValue()==MessageType.message_comm_mes){

String str=m.getSenderAccount() + \" \" +m.getTime()+\"\\n\"+\" \"+

m.getContent()+ \"\\n\";

}

try {

docs.insertString(docs.getLength(), str, attrset); //设置光标到末尾

output_pane.setCaretPosition(docs.getLength());

} catch (BadLocationException e) { }

e.printStackTrace();

发送图片信息:

在发送图片信息的时候,先将图片转换成为byte[]数组,包装在信息包种发送出去,接收到图片信息时,从byte[]数组构建图片,显示出来[23]。

图片和byte[]之间相互转换的关键代码如下: //将image转换成 byte[]

32

public byte[] imageToBytes(Image img){ }

//将 byte[]转换成image

ByteArrayOutputStream bos=new ByteArrayOutputStream(); try {

ImageIO.write((RenderedImage) img, \"jpg\

} catch (IOException e) { }

return bos.toByteArray();

e.printStackTrace();

public Image bytesToImage(byte[] b){ }

try {

return ImageIO.read(new ByteArrayInputStream(b));

} catch (IOException e) { } return null;

e.printStackTrace();

在JtextPane中显示图片的代码:

if(m.getMsgType().intValue()==MessageType.message_img){

//图片信息

String str=m.getSenderAccount() + \" \" +m.getTime()+ \"\\n\"; try {

//显示发送人 和时间

docs.insertString(docs.getLength(), str, attrset); //设置光标到末尾

output_pane.setCaretPosition(docs.getLength()); output_pane.insertIcon(new ImageIcon(m.getImg())); docs.insertString(docs.getLength(), \"\\n\//设置光标到末尾

33

}

output_pane.setCaretPosition(docs.getLength());

} catch (BadLocationException e) { }

e.printStackTrace();

在客户端显示截图示例:

图5-5聊天截图

2)服务端代码

服务端接收到客户端的信息后,只需要根据他的接收人,进行转发就可以。关键代码如下:

{

System.out.println(m.getSenderAccount() + \"send to\"+

Message m = (Message) receive(); // 如果是普通信息

if (m.getMsgType() == MessageType.message_comm_mes.intValue())

m.getReceiverAccount() + \"at\" + m.getTime());

Integer receiverAccount = m.getReceiverAccount();

ClientThread t =

ClientThreadManager.getClientThread(receiverAccount);

if (t == null) {

34

}

//不在线就暂时存储在服务器上

OffLineMsgManager.putSingle(receiverAccount, m);

} else

t.send(m);

5.5 文件模块 5.5.1 流程图

图5-6 发送文件流程图

发送文件 接收文件 同意接收 选择存放目录 对方拒绝接收 请求发送文件 确定接收 选择文件

35

5.5.2 关键代码

1)客户端代码

在客户端采用JfileChooser来浏览本地文件,点击浏览按钮后,会弹出对话框,让用户选择文件,然后将文件名,大小等信息封装在数据包里,发送出去[24]。关键代码如下:

@Override

public void mouseClicked(MouseEvent e) {

fileDialog.setDialogTitle(\"选择文件\"); fileDialog.showOpenDialog(IMChat.this); //只能选中文件

fileDialog.setFileSelectionMode(JFileChooser.FILES_ONLY); f=fileDialog.getSelectedFile();

//发送数据包,请求发送文件

Message m = new Message();

m.setMsgType(MessageType.message_file); m.setSenderAccount(ownerId);

m.setReceiverAccount(Integer.parseInt(hideButton.getText()));

SimpleDateFormat s = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");//

发送时间

}

m.setTime(s.format(new java.util.Date())); m.setFileName(f.getName());//文件名 m.setState(2);//请求发送文件 int length=(int) (f.length()/1000); m.setLength(length);//文件大小 sendMessage(m);

对方会显示提示信息:

36

图5-7 询问接收文件图

如果对方同意接收则开启线程。因为文件可能比较大,所以不能一次性发送,只能用线程分批发送。线程关键代码如下:

@Override

public void run() {

try {

int num ; bar.setStringPainted(true);

JProgressBar bar=chat.getProgressBar(); m.setMsgType(MessageType.message_file); m.setFileName(f.getName());

BufferedInputStream bos=new BufferedInputStream(new

//

FileInputStream(f));

while((num = bos.read(b)) != -1){

m.setFileByte(b);

Manager.THREAD.send(m); int value=LENGTH/10000; bar.setValue(bar.getValue()+value);}

37

bar.setVisible(false); bar.setValue(0); //发送完毕

SimpleDateFormat s = new SimpleDateFormat(\"yyyy-MM-dd

//

HH:mm:ss\");

m.setTime(s.format(new java.util.Date())); m.setState(4);

Manager.THREAD.send(m); //在窗口上显示发送成功

chat.append(new Color(0,0,255), \"文件\"+f.getName()+\"(\"

+f.length()/1000000+\"M)\"+\"发送成功\"+\"\\n\");

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block e.printStackTrace();

} catch (IOException e) { }

// TODO Auto-generated catch block e.printStackTrace();

发送完成后,双方的界面上都会显示成功信息:

图5-8 文件传输成功图

客户端接收文件的逻辑:

38

文件的传输状态被定义成了这几种: 0是不接受文件, 1是接受文件, 2请求发送文件, 3文件传输中, 4文件传送完成

客户端接收文件是可根据这些状态,进行操作,关键代码如下: //请求发送包

if(m.getState()==2){ //对话框 是否接收

int i=JOptionPane.showConfirmDialog(chat, \"确定接收\" +

m.getFileName()+\"(\" +m.getLength()+\"KB)\

\"接收文件\

Integer sender=m.getReceiverAccount();

Integer getter=m.getSenderAccount(); m.setSenderAccount(sender); m.setReceiverAccount(getter);

//同意就发送同意接收数据包 if(i==JOptionPane.YES_OPTION){

//打开保存文件对话框

JFileChooser jfc=new JFileChooser(\"c:/\");

jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

int mod=jfc.showSaveDialog(chat);

if(mod==JFileChooser.APPROVE_OPTION){

//如果选择了路径 File f=jfc.getSelectedFile(); f=new

File(f.getAbsolutePath()+\"/\"+m.getFileName());

bos=new BufferedOutputStream(new

39

FileOutputStream(f));

m.setState(1); send(m);

}else{

//选择了取消或关闭对话框 m.setState(0); send(m);

}

}else{ }

}else if(m.getState()==3){

//正在传输包

byte b[]=m.getFileByte(); //设置进度条

chat.getProgressBar().setVisible(true);

chat.getProgressBar().setMaximum(m.getLength()/10); chat.getProgressBar().setMinimum(0); bos.write(b);

m.setState(0); send(m);

}else if (m.getState()==0){

//不同意发送

JOptionPane.showMessageDialog(chat, \"对方拒绝接收文件

\通知\

}else if (m.getState()==1){

//同意发送

System.out.println(\"同意发送\"); chat.SendFile();

}else if(m.getState()==4){

System.out.println(m.getFileName()+\"传输完成\");

40

chat.getProgressBar().setVisible(false); chat.append(new Color(0,0,255), \"文件

\"+m.getFileName()+\"(\" +m.getLength()/1000+\"M)\"+\"接收完成\"+\"\\n\");

} }

}

2)服务器端代码:

服务端只负责转发,关键代码如下:

else if(m.getMsgType()==MessageType.message_file.intValue()){

Integer receiverAccount=m.getReceiverAccount();

ClientThread t=ClientThreadManager.getClientThread(receiverAccount);

}

t.send(m);

5.6 用户管理模块

5.6.1 流程图

图5-9 web用户登录图

开始 登录 用户增删改查 查看在线用户 踢用户下线 结束

41

5.6.2 关键代码

用户管理的前台页面是jsp页面, 在页面中可以对用户进行增删改查。

图5-10 用户管理图

关键代码如下:以页数列出用户

public List findByLimit(int begin,int num){

List list=new ArrayList(); conn=getConnection();

try {

ps=conn.prepareStatement(FIND_BY_Limit); ps.setInt(1, begin); ps.setInt(2, num); rs=ps.executeQuery(); while(rs.next()){ }

42

User u=rowMapper(rs); list.add(u);

}

PreparedStatement p=conn.prepareStatement(\"select count(*) from user\");

rs=p.executeQuery(); while(rs.next()){ }

rowCount=rs.getInt(1);

} catch (SQLException e) {

// TODO Auto-generated catch block e.printStackTrace();

}finally{ } return list;

close();

删除用户:

public void delete(Integer account){

conn=getConnection(); try {

ps=conn.prepareStatement(DELETE); ps.setInt(1, account); ps.execute();

System.out.println(\"delete over\");

}

} catch (SQLException e) {

// TODO Auto-generated catch block e.printStackTrace();

}finally{

close();

}

踢用户下线的逻辑也很简单,关闭socket,将服务器端所对应的线程停止,并且从线程集合中删除改线程就可,关键代码如下:

43

System.out.println(\"==========IOException==========\");

e.printStackTrace(); //停止线程 interrupt();

System.out.println(getName()+\"下线\"); //从线程集中删去本线程

ClientThreadManager.removeClientThread(Integer.parseInt(getName()));

//在线人数

System.out.println(\"在线人数: \"+ClientThreadManager.size()); //发送数据包通知下线 notifyOffline();

用户被题下线后:

图5-11 用户下线图

44

5.7 其他功能的实现

5.7.1 截图功能的实现

截图类的核心是JDK中:Robot类中createScreenCapture(Rectangle screenRect) 创建包含从屏幕中读取的像素的图像。

先用new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));

截取全部屏幕的图片,然后显示出来,覆盖住整个屏幕。然后监听鼠标事件,再用createScreenCapture(Rectangle screenRect)方法截图.

主要代码如下:

public void mouseDragged(MouseEvent e) {

int w=width; int h=height;

System.out.println(x+\" \"+y+\" \"+width+\" \"+height+\" \");

width=e.getX()-x; height=e.getY()-y;

w=(w>width?w:width); h=(h>height?h:height);

//重绘的边界要比真实的稍微大点 //只repaint一定区域,防止屏幕闪烁 repaint(x,y,w+2,h+2);

}

//

如果点击了鼠标右键则取消截图,双击确定截图完成 public void mouseClicked(MouseEvent e) {

//如果是鼠标右键的话

if(e.getButton()==MouseEvent.BUTTON3){

dispose();

45

}

if(e.getClickCount()==2){ }

} success(); dispose();

5.7.2 聊天记录功能的实现

如果是图片则显示出,发送时间和图片大小。如果是文件则显示出请求发送时间,同意接收时间,接收完成时间,和文件大小。

主要代码如下:

public static void afterSend(Object o) {

Message msg=(Message) o; try {

File f = new File(\"c:/\"+msg.getSenderAccount().toString()+\".txt\"); if (!f.exists()) { }

BufferedWriter bw=new BufferedWriter(new FileWriter(f,true)); if(msg.getMsgType().intValue()==MessageType.message_comm_mes){

bw.write(msg.getTime()+\" 发送消息给 f.createNewFile();

\"+msg.getReceiverAccount()+\":\"+\"\\n\");

}

else if(msg.getMsgType().intValue()==MessageType.message_img){

bw.write(msg.getTime()+\" 发送图片给 bw.write(msg.getContent()+\"\\n\"); bw.write(\"\\n\");

\"+msg.getReceiverAccount()+\":\"+\"\\n\");

bw.write(\"图片大小 :\"+msg.getImageByte().length+\"byte\"+\"\\n\"); bw.write(\"\\n\");

46

}

else if(msg.getMsgType().intValue()==MessageType.message_file){

if(msg.getState()==2){

bw.write(msg.getTime()+\"

请求发送文件给 \"+msg.getReceiverAccount()+\":\"+\"\\n\");

bw.write(\"文件名 :\"+msg.getFileName()+\"

文件大小: \"+msg.getLength()+\"KB\"+\"\\n\");

}

if(msg.getState()==0){

bw.write(msg.getTime()+\"

拒绝接受文件 :\"+msg.getFileName()+\"\\n\");

}

if(msg.getState()==1){

bw.write(msg.getTime()+\"

你同意接受文件 :\"+msg.getFileName()+\"\\n\");

}

if(msg.getState()==4){

bw.write(msg.getTime()+\" 发送给

\"+msg.getReceiverAccount()+\"的文件 :\"+msg.getFileName()+\"发送完成\"+\"\\n\");

}

}

}

bw.write(\"\\n\");

bw.flush(); bw.close();

} catch (IOException e) { }

// TODO Auto-generated catch block e.printStackTrace();

47

5.7.3 服务端线程的实现

在服务器上,截图信息和文件信息都是进行简单的转发: if(m.getMsgType()==MessageType.message_img.intValue()){ Integer receiverAccount=m.getReceiverAccount(); ClientThread t=

ClientThreadManager.getClientThread(receiverAccount); t.send(m);}

转发文字信息时会判断用户是否在线:

if (m.getMsgType() == MessageType.message_comm_mes.intValue()) {

System.out.println(m.getSenderAccount() + \"send to\"+ m.getReceiverAccount() + \"at\" + m.getTime());

Integer receiverAccount = m.getReceiverAccount();

ClientThread t = ClientThreadManager.getClientThread(receiverAccount);

if (t == null) {

//不在线就暂时存储在服务器上

OffLineMsgManager.putSingle(receiverAccount, m);

} else

t.send(m);}

5.8 用户界面的设计

5.8.1 登陆界面

登陆界面的实现比较简单,是Jlabel ,JtextFeild,Jpanel等控件的集合

48

图 5-12 用户登录界面

5.8.2 好友列表

好友列表采用了绝对布局,用到了CardLayout和JscrollPane:

图5-13 好友列表界面

49

好友列表展开后:

图5-14 好友列表展开界面

5.8.3 聊天界面

双击好友头像后,就会显示出聊天界面:

图5-15 聊天界面

50

结 论

本系统采用C/S模式,聊天室页面简洁,操作便捷,稳定可靠,性能优良。本系统可以实现通讯系统最基本的两个功能:一是双方能够互相收发信息,二是双方能够互传文件。后台还可以对用户进行管理。

这次毕业设计用到了,Swing,Socket,JSP,Struts2,AJAX,JDBC,Thread,JavaScript等各种技术,采用MySQL作为数据库,MyEclipse作为开发工具。基本上包含了大学所学习J2EE和J2SE 的所有知识。在毕业设计的过程中,加强了对多线程的理解和掌控。

尽管本系统基本实现了基本的通信功能,但是由于受编程技术和经验的,不得不承认,某些功能实现得有点简单,甚至简陋,还有一些功能没有实现,例如通信信息的安全性没有实现。有待于继续研究。

51

致 谢

毕业论文即将完成,我的学生生涯也要告一段落了。借此机会要对母校,亲人,老师和同学们表示感谢!

再回首,母校的一草一木是那样熟悉;再回首,母校的一砖一瓦是那样亲切,在此对母校表示深深的感谢与怀念,感谢沈阳理工大学给我的学习机会!

首先,我诚挚地感谢我的导师赵老师。他严谨的治学态度、对知识不懈的追求,必将使我受益终身。赵老师在毕业设计过程中给予了我谆谆教诲和无私帮助。本论文从选题到系统调试成功到最后成文,无不倾注着赵老师的心血。在论文撰写过程中,赵老师认真的分析每个同学的论文,并且找出相应的错误,督促我们改正。在此论文脱稿之际,我再一次向他致以最诚挚的谢意。

在我漫长的求学生涯中,倾注了父母一生的心血,是他们多年来的辛勤付出,使我能顺利完成学业。还要感谢我的同学们给我的支持和鼓励,使我一直以来能够坚持努力。在此给他们献上最诚挚的谢意和最深的祝福。

感谢参考文献的所有作者,他们卓有成效的研究成果是笔者论文研究的基础。 最后再次对关心、帮助、支持和鼓励我的所有领导、老师和同学表示诚挚的谢意!

52

参考文献

[1] ICQ Inc. what is ICQ? About the Web's Largest Community.

http://www.icq.com/products/whatisicq.html.2002.5.19.

[2] OlivierHersent.《网络电话——基于分组的多媒体通信系统》[M].北京:人民邮电出版社,2000年.

[3] 刘清堂,蔡进,章光琼等著.《网络电话》[M].北京:北京邮电大学出版社,2002. [4] 叶华,谢玮,梁勇,崔进水著.《网络电话/传真技术》[M].北京:人民邮电出版社,2000年.

[5] 梁晓伟.网络即时通讯系统的设计与实现[硕士学位论文]电子科技学,2012. [6] 丁振凡 Java语言实用教程[M]北京邮电大学出版社,2008.

[7]( 美)Java核心技术卷1:基础知识(第八版):Cay S.horstmann, GaryCornell.北京:机械工业出版社,2008.

[8] 辛运帏,饶一梅Java程序设计教程[M]机械工业出版社,2007.

[9] Bruce Eckel. Thinking in Java 英文第四版[M].机械工业出版社,2007.

[10] (美)Y.Daniel Liang Java语言程序设计进阶篇(英文版)第6版机械工业出版社[M],2008.

[11] 谢希仁计算机网络(第5版)电子工业出版社[M],2008.

[12] (美)Y.Daniel Liang Java语言程序设计基础篇(英文版)第6版机械工业出版社[M] ,2008.

[13] 张蓓,赵国锋著JSP数据库通用模块开发与系统移植.北京:清华大学出版社 . [14] 吴建,张旭东著.JSP网络开发入门与实践.北京:人民邮电出版社 . [15] 孙卫琴著.Java网络编程精解.北京::电子工业出版社.

[16] 饶锋,毛迪林,代春阳.JAVA2安全机制与实例研究[J].计算机应用与软件, 2002. [17] 宛延周.JAVA编程技巧[M].北京:机械工业出版社,2005:68-1. [18] 施铮.Java 2实用编程百例[M].北京:清华大学出版社,2005:43-.

[19] (美)沃尔瑟(Walther,S.) 著,谭振林等译. ASP.NET2.0揭秘[J],卷号(1). 人民邮电出版社,2007.10.

[20] Grady Booch,James Rumbaugh,Ivar Jacobson 著.邵维忠,麻志毅,张文娟 孟祥文译.《UML用户指南》(《The Unified Modeling Language User Guide》)机械工业出版社,

53

2001年6月.

[21] 彭建翔著.《Css2网页结构建筑师》[J]. 中国铁道出版社,2002年1月. [22] 萨师煊,王珊编.《数据库系统概论(第三版)》[J].高等教育出版社,2000年2月.

[23] 齐治昌,谭庆平,宁洪著.《软件工程(第二版)》[J]. 高等教育出版社,2004年4月.

[24] Ohn Kauffman with Kevin Spencer and Thearon Willis Beginning ASP Databases First Published 1999 Published by Wrox Press Ltd,Arden House, 1102 Warwick Road, Acocks Green,Birmingham, B27 6BH, UK.

附录A 英文原文 Instant communication

Instant communication refers to immediately send and receive Internet news etc business. Since 1998, especially in recent years since the reappearance of the rapid development, instant communication function are increasingly rich, gradually integrated E-mail, blog, music, TV, video games and search multiple functions. Instant communication is no longer a simple chatting tools, it has developed the chengji exchange, information, entertainment, search, e-commerce, office coordination and enterprise customer service, is a comprehensive information platform.

Instant messaging software in a convenient communication network technology, through computer keyboard or wireless devices on the network for the user to provide a real-time conversation platform, is Internet new form of communication, for public communication, business communications and business cooperation provides new media of communication, With the popularization and instant messaging software instant communication industry into 10 years of development, instant messaging user audience group gradually expanding, and formed the basis for user the new network marketing platform, more and more operators and investors to look at this is to have the maximum user groups of Internet service market. 2005 international giant MSN and Yahoo just announced to realize two service provider instant messaging software to communication function, 2006 IBM launched the latest again the enterprise instant messaging software, While in China market, across the Internet platform and mobile communication platform of instant messaging service in Internet users widely circulated. Chinese instant communication market upcoming turning point to China's instant messaging users and Chinese instant communication market with a strong power to use practitioners and exploit the instant communication industry.

In real-time communication market seek new breakthrough, also exposed a series of industrial problem. Therefore, aeryn market consulting Co., LTD. Write the \"China instant communication research report\

55

analysis of instant communication industry, the relative problems were analyzed, and the industry's future development direction has made the forecast and the judgment. Hope this report for the Chinese instant messaging healthy industrial development play a positive role.

As the Internet service free meal by netizens earliest cognition, accept and extensive application of Internet platform software, computer one instant messaging software in generous serves the masses of users a few years later, the acquisition of a huge public foundation. This public based not only lies in the large number of users, also has enormous market potential performance in a variety of Internet service mode, and benefited a lot of network AD industry. Therefore, based on the user instant communication industry in build user access to market, but also extend the platform, freeing up more operation mode of instant messaging denotation market.

Instant communication is initially by AOL, Microsoft, yahoo, tencent etc independent of telecom operators of instant communication service providers. But with its function increasingly rich, are applied widely, especially instant communication enhancement software of certain functions such as IP telephone etc, had been in divergence and the replacement of traditional telecommunication business, make telecom operators had to take measures to deal with the challenges. In June, 2006, China mobile has launched their instant communication tools - Fetion, China unicom will also launch instant messaging tools \"super letter\as the original instant communication service provider.

Internet instant communication a bit like mobile wireless communication: they were confined within the minority, the bluestockings as a plaything and outfit that was reviled. However, they are doomed to transcend traditional communication mode and become the mainstream methods of communication. Now, even the rapid development and popularization of communication to all those expected surge. Nevertheless, the rapid popularization and among mainstream is only the first step of instant communication development, then go perhaps more important step --, uniform standard, decisive battle market.

In China, once FengFengHuoHuo of dozens of IM software gradually disappeared, disarm westerlo, although occasionally some in active new products (such as \"netease

56

bubbles\" manasseh, lang UC) makes his debut, but already difficult ChengQiHou, cannot compete with tencent. QQ little penguin with its mask of mysterious smile, gradually unify river's lake, overlook global, become instant communication market empire. By April 30, 2003, QQ registered users has been more than 1.7 million, online user is supreme 33.9 million, everyday independent online number more than 16 million.

Instant communication can say is the E-mail, WWW after, the Internet of the most lethal applications. Aeryn consultation, a survey of 2003 China instant communication software the highest online number has reached the end of 2004.5.5 million people, hopefully exceeding 7.4 million, 2006 will breakthrough 12 million people.

Instant communication from ICQ. Four youths in Israel cadastral July 1996 established Mirabilis company, and in in November launched the world the first instant communication software ICQ (currently ICQ has to AOL underneath all, meaning \"I am looking for You\" - \"I Seek You\

Compared with the traditional telephone, E-mail and other communications way, instant communication not only save costs and higher efficiency. For example enterprise of instant communication systems can always check departments online personnel, communication branches, real-time transmission documents, video conference, remote indiscriminately SMS, etc. Therefore, instant communication is likely to become the security software, ERP software after another enterprise an essential tool, the potential market should not be ignored.

Similarly, in the consumption field, more individual users in steering instant communication applications, some experts think that, in a sense, business instant communication software enterprise is developing into a virtual telecommunications operator. Therefore, instant communication has become the existing telecommunications operators must be involved in the field.

Due to the rise of instant communication software, can real-time communication \"content\" is rapidly by voice overall expansion to images and text, data, etc, but \"multi-functional\" is not all the meaning of instant communication, to overcome the Internet, mobile phone and fixed phone etc multiple platform for communications is instant communication future value. A the personage inside course of study thinks, instant

57

communication has already crossed over the original narrowly, \"network\" concept, positive more generalized the direction of development, the future of the instant communication software can at any time anywhere and anybody any way of communication, is not only a voice, including images, information, data and so on, not only on the computer, still can be in mobile, fixed telephone calls and such any terminal.

But, should see that with other Internet application is same, instant communication is originally computer player pets, once rose to business level, its development are faced with the problem will become increasingly obvious, including safety and interworking is the current development of the soft rib of instant communication.

For service providers for different view interworking's position is not consistent. Stronger service most is not willing to realize and other service provider of software compatible, and relative strength of weak service provider, is hoping the real-time communication software compatibility, namely the inter-communication to expand their instant communication software product user groups. In fact, instant communication between software to realize the inter-communication will mainly involves technology and interests two aspects.

Technically, instant communication software between the inter-communication technical operation difficulty is not high, software, realize between interoperate interworking can be done completely. Last September, American Reuters, AOL just signed a cooperative agreement in order to realize the two companies of the instant communication service software the each other between open. So, Reuters instant communication software users will be able to \"see\" login to include AIM, ICQ, AOL instant communication service system users and write to each other with them.

At present the inter-communication difficult, there is the interworking between enterprises interests distribution. Because most instant communication software users, hope to search through instant communication software realization network communication net friend, would certainly first choose to use already have considerable users of instant communication software.

As for security, whether individual users, or enterprise users, are facing a new threat. For individual users, through instant communication software spread of viruses like hidden

58

bombs, once the outbreak, light is material loss, heavy then computers, have more very person, can cause instant communication between users of misunderstanding.

But for enterprise-level users, an important problem is most instant communication systems is open, which means that the user just know another user instant communication address, he can be directly to send information, which for employees to the external leaks enterprise of commercial secrets of very convenient. And the main characteristics of instant communication is between two end can be directly communicate by any third party, without server transshipment. This makes Internet supervision of instant communication of the user data exchange can monitor the difficulty increases, this lets managers of enterprises greatly headaches. IDC company data show that the global more than 2000 million business people are using instant communication tools, and this number will be in 2005 before gone up 300 million people. The widespread use of instant communication and its lack of safety function characteristics of itself, in order to add encryption, filing and log function products created great demand.

However, as long as have a large user groups, and can have realistic commercial interests, the above two problem will be solved. Recently, AOL, Microsoft and yahoo are mutual cooperation make their instant messaging service realize enterprise environment within the interchange, this also is the industry leader in order to make three different system of computer users to communicate the first major cooperation and breakthrough. Three giant will announce to break their network between \"electronic walls\communication in the business world gain wider application of the partnership. In order to use this new system, the enterprises must first obtain Microsoft network software license, the software will act as connection AOL, yahoo and MSN Microsoft, the respective operation system network center.

In terms of security, enterprise application requests obviously higher. Instant communication software in order to adapt to the needs of users, and constantly improve the system of communication ability, namely through the firewall capacity, which could bring negative effect for safety. It requires enterprises to comprehensive consideration of the firewall, anti-virus, intrusion detection, safety evaluation, VPN, many products, according to the specific application of network topology and the specific demand, formulate overall

59

solutions and security strategy. Expert proposal, the enterprise may establish the enterprise internal enclosed real-time information system. So-called closed-end real-time information system in the enterprise is established within their instant messaging servers, in each stage the personal computer installed on specific real-time information program that can is enterprise self development, also can be the universal, such as BQQ, MSN, etc. Real-time information system fully operational in enterprise Intranet environment does not have any contact with the outside world. Its advantage is can provide enterprises with more secure and reliable audio documents and information transmission services, and network management personnel but also on the enterprise internal real-time information for more effective management. In addition, in the enterprise set up inside real-time information gateway is an efficient way, every employee can use real-time information procedures convenient, quick, but im must pass through the company's internal real-time information gateways, through real-time information gateway for information filtering method and management, any and all information must leave instant communication recording (log files), when necessary information management personnel may, according to the records trace backwards and forwards.

Microsoft security program manager Stephen will present instant messaging threat in the mid 1990s compared to the email virus. He thinks, to avoid to make instant messaging threat to like E-mail threats that flood degree, the influence of education to clients than to instant messaging take technical security measures.

Find most of the instant communication threats are not new threats, similar threats in E-mail had appeared, just changed a kind of new media.

Antivirus designed technology expert Simon says, to attack instant messaging software, hackers without using a new method, now of instant messaging software still to Trojan opened a door.

Because im service software agreement very open, easy to use, hacker thus can easily use them to attack.

AOL said it is developing new security technology, but it also pointed out that the user aware of the dangers facing to alleviate the problem of influence has greater influence.

60

AOL's spokesman Andrew said, in some cases, can take technical measures to protect the user, such as filtering malicious links.

But think the best way is to users instill good behavior habits, even links from friends seem to be friends again, also want to verify it.

Currently, all found of instant messaging threats are in instant messaging software above the Trojan horse running code, rather than using software defect of worms spread, but some experts believe that such a worm virus is just a question of time. History has proved that all software defect, there is always a hackers using these defects.

61

附录B 汉语翻译

即时通信

即时通信是指能够即时发送和接收互联网消息等的业务。自1998年面世以来,特别是近几年的迅速发展,即时通信的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通信不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。

即时通讯软件以一种便捷的网络通讯技术、通过计算机键盘或无线设备在网络上为使用者提供一个实时交谈的平台,是互联网新形态的通讯方式,为公众通讯、商务通讯及商务合作提供了交流的新媒介,随着即时通讯软件的普及和即时通讯产业进10年的发展,即时通讯用户受众群体逐渐扩大,并形成了以用户为基础的新型网络营销平台,越来越多的运营商和投资者着眼于这个拥有最大用户群体的互联网服务市场。2005年国际巨头MSN和Yahoo就宣布了要实现两个服务商即时通讯软件的互通功能;2006年IBM又再次推出最新的企业即时通讯软件;而在中国市场上,跨越互联网平台和手机通讯平台的即时通讯服务在网民中广为流传。中国即时通讯市场即将到来的新转折点给中国即时通讯用户和中国即时通讯市场从业者以强大动力来使用和开拓即时通讯产业。

在即时通讯市场寻求新突破的时候,也暴露出一系列的产业问题。为此,艾瑞市场咨询有限公司撰写了“中国即时通讯研究报告”,通过大范围的调研访谈和数据分析,对即时通讯产业中的相关问题进行了深入剖析,并对产业未来发展方向做出了预测和判断。希望此报告能为中国即时通讯产业的健康发展起到积极推动作用。

作为互联网免费服务大餐中最早被网民认知、接受并广泛应用的互联网平台软件之一,电脑即时通讯软件在慷慨的服务于广大网民数年之后,获得的是巨大的民众基础。这种民众基础不仅仅表现在使用用户的庞大数量上,还表现在具有巨大市场潜能的多种互联网服务形式,以及收益颇丰的网络广告产业。因此,以用户为基础的即时通讯产业在营造用户使用市场的同时,也延伸发展开辟出了多平台、多运营模式的即时通讯外延市场。

62

即时通信最初是由AOL、微软、雅虎、腾讯等于电信运营商的即时通信服务商提供的。但随着其功能日益丰富、应用日益广泛,特别是即时通信增强软件的某些功能如IP电话等,已经在分流和替代传统的电信业务,使得电信运营商不得不采取措施应对这种挑战。2006年6月,中国移动已经推出了自己的即时通信工具——Fetion,中国联通也将推出即时通讯工具“超信”,但由于进入市场较晚,其用户规模和品牌知名度还比不上原有的即时通信服务提供商。

互联网即时通信有点像手机无线通信:它们最初都局限在小圈子内作为少数人的玩物而屡遭诟病。不过,它们注定要超越传统通信方式而成为主流通信手段。如今,即使通信的飞速发展与普及令所有预期者大跌眼镜。不过,快速普及、跻身主流还只是即时通信发展的第一步,接下来要走的也许是更重要的一步:统一标准、决战市场。

在中国,曾经风风火火的数十个IM软件逐渐销声匿迹,缴械败北,虽然偶尔还有一些在活跃的新品(例如“网易泡泡”、朗玛UC)闪亮登场,但已难成气候,无法同腾讯抗衡。QQ小企鹅以其不露声色的神秘微笑,逐渐一统江湖,傲视全球,成为即时通信市场的霸主。截至 2003年4月30日,QQ的注册用户已超过1.7亿个,最高在线用户是33.9万,每天上线人数超过1600万。

即时通信可以说是继电子邮件、WWW之后,互联网上最具杀伤力的应用。艾瑞咨询的一项调查显示,2003年中国即时通信软件的最高在线人数已达550万人,到2004年底有望突破740万人,2006年则将突破1200万人。

即时通信源自ICQ。四位以色列籍年轻人在1996年7月成立了Mirabilis公司,并于同年11月推出了全世界第一个即时通信软件ICQ(目前ICQ已经归AOL旗下所有),意为“我在找你”——“I Seek You”,简称ICQ。

相对于传统的电话、E-mail等通信方式来说,即时通信不仅节省费用,而且效率更高。例如企业的即时通信系统可以随时查看各部门在线人员、沟通各分支机构、即时传输文件、进行远程视频会议、群发手机短信等。因此,即时通信很有可能成为继安全软件、ERP软件后又一企业必备的工具,市场潜力不可忽视。

同样,在消费领域,越来越多的个人用户也在转向即时通信应用,有专家认为,从某种意义上说,经营即时通信软件的企业正在发展成一个虚拟的电信运营商。因此,即时通信已经成为现有电信运营商必须介入的领域。

由于即时通信软件的兴起,能够进行即时互通的“内容”正迅速由语音全面扩展到图像、文字、数据等方面,不过“多功能”还不是即时通信的全部内涵,能够跨越

63

互联网、手机、固定电话等多个平台进行通信才是即时通信未来的价值所在。一位业内人士认为,即时通信已经跨越原来狭义上的“网络”念,正向更为广义的方向发展,未来的即时通信软件可以随时随地和任何人进行任何方式的沟通,不仅是语音,还包括图像、资料、数据等等,不仅在电脑上,还可以在手机、固定电话等任何终端上。

但是,应该看到,同其他的互联网应用一样,即时通信原本是电脑玩家的宠物,一旦上升到商务层面,其发展面临的问题便日渐突出,其中安全和互联互通便是当前即时通信发展的软肋。

对于服务商来说,不同服务商看待互联互通问题的立场是不一致的。实力较强的服务商多半不愿意实现和其他服务商的软件兼容,而实力相对较弱的服务商则希望通过即时通信软件的兼容,也就是互联互通来扩大自身即时通信软件产品的用户群。实际上,即时通信软件之间要实现互联互通将主要涉及到技术和利益两个方面。

在技术上,即时通信软件之间互联互通的技术操作难度并不高,软件之间实现兼容、实现互联互通完全可以做到。去年9月,美国路透社、AOL就签署了一项合作协议以实现两家公司的即时通信服务软件之间的互相开放。这样,路透社即时通信软件的用户将能够“看到”登录到包括AIM、ICQ在内的AOL公司即时通信服务系统上的用户,并与他们互相通信。

目前互联互通难,就难在互联互通企业间的利益分配上。因为多数即时通信软件的用户,都希望通过即时通信软件寻找网友实现网络交流,当然会首先选择使用已经拥有相当多使用者的即时通信软件。

至于安全方面,无论是个人用户,还是企业用户,都面临新的威胁。对于个人用户来说,通过即时通信软件传播的病毒就像潜藏的,一旦爆发,轻则资料丢失,重则电脑瘫痪,更有甚者,会造成即时通信用户之间的误会。

而对于企业级用户来说,一个重要问题就是大多数即时通信系统是公开的,这意味着用户只要知道另一个用户的即时通信地址,他就可以直接向对方发送信息,这对于员工向外界泄露企业的商业秘密非常便利。而且即时通信的主要特点是两台终端之间可以直接进行交流,而不必通过任何第三方服务器中转。这就使得网络监管对即时通信用户的数据交换进行监控的难度增加,这让企业管理者大为头疼。IDC公司的数据显示,全球超过2000万的商务人士都在使用即时通信工具,而且这一数字将在2005年之前猛升至3亿人。即时通信的广泛使用以及它本身缺乏安全功能的特性,为向它添加加密、归档和日志功能的产品创造出了很大需求。

不过,只要拥有庞大的用户群,并且能够有现实的商业利益,上述的两个难题都会得到解决。最近,AOL、微软和雅虎正相互合作让各自的即时信息服务实现企业环境内的互通,这也是这些业界领袖为了让三种不同系统的电脑用户相互通信的首次重大合作和突破。三巨头将公布为打破各自网络间的“电子围墙”,让即时通信在商务领域获得更大范围应用的合作计划。为了使用这种新系统,企业要先行获得微软网络软件的授权,这种软件将会充当连接AOL、微软、MSN和雅虎各自运作的系统的网络中心。

在安全方面,企业应用的要求显然更高。即时通信软件为适应用户的需求,不断提高系统的通信能力,即通过防火墙的能力,这就为安全带来负面作用。这就要求企业必须综合考虑防火墙、防病毒、入侵监测、安全评估、VPN等多种产品,根据网络的具体拓扑和应用的具体需求,制订整体的解决方案和安全策略。专家建议,企业可以建置企业内部封闭式的实时信息系统。所谓封闭式实时信息系统是在企业内部建立自己的即时信息服务器,在每台个人计算机上安装特定的实时信息程序,这个程序可以是企业自己开发的,也可以是通用的,比如BQQ、MSN等。实时信息系统完全运作在企业的Intranet环境并不与外界有任何联系。其优点是可以为企业提供更为安全、可靠的音视频文件及信息传输服务,同时网络管理人员还可对企业内部实时信息进行更加有效的管理。此外,在企业内部设置实时信息网关也是一种有效的途径,每一个员工都可以使用通用的实时信息程序进行方便、快捷的即时通信,但必须通过公司内部的即时信息网关,通过即时信息网关对信息进行过滤和管理,任何进出的即时通信信息都必须留下记录(日志文件),必要时信息管理人员可以根据这些记录追查来龙去脉。

微软的安全计划经理斯蒂芬将目前的即时通讯威胁比喻为1990年代中期的电子邮件病毒。他认为,为了避免使即时通讯威胁达到象电子邮件威胁那样的泛滥程度,对客户进行教育的影响要大于对即时通讯采取的技术性安全措施。

发现的大多数即时通讯威胁都不是新威胁,类似的威胁在电子邮件中都出现过,只是换了一种新的传播媒介。

反病毒专技术专家西蒙说,要攻击即时通讯软件,黑客无须使用新的方法,目前的即时通讯软件仍然向特洛伊木马病毒敞开着大门。

由于即时通讯服务软件的协议非常开放,易于使用,因此黑客可以很轻松地利用它们发动攻击。

65

AOL 表示,它正在开发新的安全技术,但它同时指出,使用户意识到面临的危险对于减轻这一问题的影响有更大的影响。AOL 的发言人安德鲁说,在有些情况下,可以采取技术性的措施保护用户,例如过滤恶意的链接。

但认为最好的方法是向用户灌输良好的行为习惯,即使是链接好象是来自用户,也要再向用户证实一下。

目前,所有发现的即时通讯威胁都是在即时通讯软件之上运行的特洛伊木马代码,而不是利用软件缺陷传播的蠕虫,但一些专家认为,出现这样的蠕虫病毒只是一个时间问题。历史已经证明,所有软件都存在缺陷,总会有黑客利用这些缺陷。

66

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务