即时消息系统--本科毕业设计

来源:互联网 发布:卖家号可以做淘宝客吗 编辑:程序博客网 时间:2024/04/27 19:39

 

摘要

 

随着网络通信技术和计算机技术的进一步发展,即时消息正在成为网络在线活动中不可缺少的业务。本课题在现有的网络通信技术、数据库技术和编程技术的基础上设计并实现了网络即时消息系统。

该系统采用三层 C/S网络系统构架,采用多线程实现服务器的并发处理,采用 ODBC 接口访问 SQL Server2000数据库设计数据管理模块,采用J2SE平台和java语言去开发系统。该系统按照软件工程思想采用面向对象和模块化设计方法设计,其中采用了网络通信技术、数据库技术、多线程技术等计算机技术,实现了网络通信的基本功能,具有通信即时性的特点。

在论文中,我们将会讨论网络即时消息系统的现状和发展,研究实现此系统的技术背景。然后我们对系统进行需求分析。按照要求,我们将进行总体设计和详细设计,如服务器端的设计,数据库的设计和客户端的设计。最后实现系统的配置和使用。

本毕业设计所完成的网络即时消息系统的主要功能如下:

1.  服务器端:后台启动、监视用户和发送系统消息;

2.  用户登录和注册;

3.  好友管理:查找好友、添加好友和删除好友;

4.  通信:发送消息、接收消息和聊天记录

5.  上线和隐身。

 

关键词:即时消息系统,C/S三层结构,TCP/IP,  J2SE平台

 

 

 

 

 

 

 

 

 

 

 

 

 


 

Abstract

 

With the further development of network communication technology and computer technology, Instant Messaging has been a  requirement of on-line activities. This project  design and implementation,the instant messaging based on the topic of the existing network communication technology, database technology and programming technology. 

 

This system uses composite structure of three-tier C/S to design system architecture, uses multi-threading to implement server’s parallel processing, uses ODBC interface to access to SQL Server database to design data management module, uses J2SE(Java 2 Standard Edition) and Object-oriented programming language ,java,to develop the system.This system is designed by object-oriented and modular design method, which used computer technologies based on network communication technology, database technology, Multi-threading technology, software reuse and so on, this system has basic functions of  network communication, , and has features of instant.

 

In my dissertation,we will discuss the status and development of network instant messenger,and research in the relevant technology background.After that we will analyse the requirement of the system. With the requirement analysis,we will make the general design and detailed design,such as server design ,database design and client design.In the last part ,we will implement the system and put it into practice.

 

The system has completed the following major functions:

1.Server: Startupsurveillance and send systemic message.;

2.User management: registration login and logout;

3.Friend management: find ,add and delete;

4.Communication:sending message,receriving message and receiving system message;

5.Online and hide.

 

Key WordsInstant MessengerC/S Three-layer Construction, TCP/IPJ2SE Platform

 

 

 

 

 

 

 

 

 

 


 

目录

 

. I

Abstract II

目录. III

第一章 绪论. 1

1.1选题背景. 1

1.1.1 即时消息系统的研究现状. 1

1.1.2 即时消息系统的发展趋势. 1

1.1.3论文研究的主要内容. 2

1.2 技术背景. 2

1.2.1 C/S 模型. 2

1.2.2 TCP/IP 协议. 2

1.2.3编程技术. 4

第二章 系统分析与设计. 7

2.1 需求分析. 7

2.2系统总体框架. 7

2.2.1总体设计. 7

2.2.2功能模块. 8

2.3系统详细设计. 10

2.3.1多线程设计. 10

2.3.2数据库设计. 11

2.3.3服务器的设计. 11

2.3.4客户端的设计. 15

2.3.5消息通信的设计. 18

第三章 系统实现. 22

3.1数据库部署. 22

3.1.1建立数据库. 22

3.1.2 配置ODBC数据源. 22

3.2 开发环境. 23

3.2.1 构建Java SE平台. 23

3.2.2 安装开发工具 eclipse 24

3.3 服务器端的实现. 24

3.3.1 启动服务器后台. 24

3.3.3 发送系统消息. 25

3.4 客户端的实现. 25

3.4.1 用户注册. 25

3.4.2 登录. 26

3.4.3程序主界面. 26

3.4.3 添加好友. 27

3.4.4 上线与隐身. 28

3.4.5 聊天通信. 28

第四章 总结. 30

文献. 31

致谢. 32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

第一章绪论

 

1.1选题背景

 

1.1.1 即时消息系统的研究现状

即时消息系统[1](Instant MessengerIM)是一种在后 PC 时代兴起的,以 Internet 网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。即时消息系统产生有着深刻的社会原因:人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时消息软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。从这点上讲,即时消息系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。

国内最为流行的即时消息软件是 OICQ(简称 QQ) 。它以良好的中文界面和不断增强的功能形成了一定的 QQ 网络文化。该软件是由腾讯公司于 1999 2 月自主开发的基于Internet的即时消息系统。腾讯QQ 目前已成为中国最主要的即时消息服务网络软件。作为一种即时消息工具,QQ 支持显示好友在线、即时传送文字、语音和文件等功能。 QQ 还与无线寻呼、GSM 短信息、IP 电话网互联,为用户提供互联网短信及信息增值服务。腾讯 QQ 开发和拓展统一、高速、丰富的互联网应用平台、在线广告业务、移动通信业务、ISPIP电话合作业务、企业商用即时消息服务、在线客户支持及在线呼叫业务。

1.1.2 即时消息系统的发展趋势

21世纪将是网络化、信息化的世纪,信息的融合已经成为社会发展的主流方向[2]。即时消息系统将不断与信息交流领域的系统相互集成和渗透,扩展其自己的功能和应用范围,满足未来话音,数据和视频的多媒体应用需要,使即时消息以更丰富的接入方法,更高的服务质量,更友好的面貌呈现在世人的面前。

从功能角度来看,即时消息系统向支持全媒体方向发展,随着多媒体技术在网络应用中的发展,即时消息系统承载的媒体,不再局限于原来的文字、语音和文件的信息交换,信息载体扩展到图形、图像和流媒体等多媒体业务上。目前ICQ QQ预设了部分简单的表情图像, 通过传输图像代码来传递表情图像,可以被视为即时消息开发商开发支持图形、图像为载体的即时消息软件的开端。

从应用范围角度来看,即时消息系统集中在 Internet 个人用户之间的信息交流应用,随着网络技术应用的发展,即时消息系统应用范围向园区化、集团化拓展,应用领域突破个人,而用于远程教学、远程医疗、远程演示、网络会议等领域。

1.1.3论文研究的主要内容

本论文的主要工作是利用编程技术建立一基于 J2SE 的即时消息系统,主要实现网络即时聊天功能。在建立这个系统的过程中,我将会研究JAVA语言,多线程编程、网络编程以及数据据等方面的知识。

在我的论文中,我将会研究即时消息的发展,并针对不同即时消息工具之间不能互通的弊端,介绍即时消息系统中的应用。为了更好地实现系统,我们还要研究J2SE 技术。在论文中介绍了 J2SE 的体系结构、系统设计以及 J2SE 的开发环境。熟悉了开发平台,我们还要了解 基于TCP/IP Socket 网络连接的基础知识,包括网络通信系统架构及 Socket 通信在该系统中的应用等内容。在论文中将着重介绍网络即时消息系统的设计和实现,包括界面及各个功能模块的设计,给出了相应的流程图并对其功能做了详细描述,最终实现了客户端之间的即时聊天通信功能。最后是结尾部分,对本文做了总结并针对该系统提出了一些不足和今后需要改进的地方。

 

1.2 技术背景

 

1.2.1 C/S 模型

在网络连接模式中,除对等网外,还有另一种形式的网络,即客户机/服务器网[3]Client/Server。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。

这里客户和服务器都是指通信中所涉及的两个应用进程(软件)。使用计算机的人是计算机的用户user)而不是客户client)。但在许多国外文献中,也经常把运行客户程序的机器称为client(这种情况下也可把client译为客户机),把运行服务器程序的机器称为server。所以有时要根据上下文判断clientserver是指软件还是硬件。

它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,WebClient/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

1.2.2 TCP/IP 协议

1. IP

 网际协议IPTCP/IP的心脏,也是网络层中最重要的协议[4] IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCPUDP层;相反,IP层也把从TCPUDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

高层的TCPUDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCPUDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。

2. TCP

如果IP数据包中有已经封好的TCP数据包[5],那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。

TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。

面向连接的服务(例如TelnetFTPrloginX WindowsSMTP)需要高度的可靠性,所以它们使用了TCPDNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。

3. UDP

UDPTCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTPTelnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNSDNS也使用TCP)。 欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。

4. TCPUDP的端口结构

TCPUDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。

两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCPUDP连接唯一地使用每个信息中的如下四项进行确认:

l        IP地址: 发送包的IP地址;

l        目的IP地址: 接收包的IP地址;

l        源端口: 源系统上的连接的端口;

l        目的端口: 目的系统上的连接的端口。

端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯

1.2.3编程技术

1.JAVA语言

Java[6]是由Sun Microsystems公司于19955月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的WebInternet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。

 Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API[7]能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。

2. Winsock

Windows下网络编程的规范-Windows SocketsWindows下得到广泛应用的、开放的、支持多种协议的网络编程接口。 通信的基础是套接口(Socket),一个套接口是通讯的一端。在这一端上你可以找到与其对应的一个名字。一个正在被使用的套接口都有它的类型和与其相关的进程。套接口存在于通讯域中。通讯域是为了处理一般的线程通过套接口通讯而引进的一种抽象概念。

在一次网络通信/连接中有以下几个参数需要被设置:本地IP地址 - 本地端口号 - 对方端口号 - 对方IP地址。左边两部分称为一个半关联,当与右边两部分建立连接后就称为一个全关联。在这个全关联的套接口上可以双向的交换数据。如果是使用无连接的通信则只需要建立一个半关联,在发送和接收时指明另一半的参数就可以了,所以可以说无连接的通信是将数据发送到另一台主机的指定端口。此外不论是有连接还是无连接的通信都不需要双方的端口号相同。Socket 接口是访问 Internet 使用得最广泛的方法。

3.多线程编程

多线程[8]是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。

使用线程的好处有以下几点:

  ·使用线程可以把占据长时间的程序中的任务放到后台去处理

  ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

  ·程序的运行速度可能加快

  ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

 多线程在JAVA里面的应用也是很广泛。Java对多线程的支持是非常强大的,他屏蔽掉了许多的技术细节,让我们可以轻松的开发多线程的应用程序。

1.2.4开发平台

1. J2SE平台

Java2平台包括:标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。J2SE,J2MEJ2EE,这也就是SunONE(Open NetEnvironment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EEJava2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

Standard Edition(标准版) J2SE 包含那些构成Java语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程定位在客户端,主要用于桌面应用软件的编程。J2SE 包含那些构成Java语言核心的类。 比如:数据库连接、接口定义、输入/输出、网络编程

2. SQL SERVER数据库

SQL Server 2000 [9]的特性Microsoft® SQL Server™ 2000 的特性包括:

Internet 集成。 SQL Server 2000 数据库引擎提供完整的 XML 支持。它还具有构成最大的 Web 站点的数据存储组件所需的可伸缩性、可用性和安全功能。SQL Server 2000 程序设计模型与 Windows DNA 构架集成,用以开发 Web 应用程序,并且 SQL Server 2000 支持 English Query Microsoft 搜索服务等功能,在 Web 应用程序中包含了用户友好的查询和强大的搜索功能。

可伸缩性和可用性。 同一个数据库引擎可以在不同的平台上使用,从运行 Microsoft Windows® 98 的便携式电脑,到运行 Microsoft Windows 2000 数据中心版的大型多处理器服务器。SQL Server 2000 企业版支持联合服务器、索引视图和大型内存支持等功能,使其得以升级到最大 Web 站点所需的性能级别。

企业级数据库功能。 SQL Server 2000 关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护数据完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。SQL Server 2000 分布式查询使您得以引用来自不同数据源的数据,就好象这些数据是 SQL Server 2000 数据库的一部分,同时分布式事务支持充分保护任何分布式数据更新的完整性。复制同样使您得以维护多个数据复本,同时确保单独的数据复本保持同步。可将一组数据复制到多个移动的脱接用户,使这些用户自主地工作,然后将他们所做的修改合并回发布服务器。

易于安装、部署和使用。 SQL Server 2000 中包括一系列管理和开发工具,这些工具可改进在多个站点上安装、部署、管理和使用 SQL Server 的过程。SQL Server 2000 还支持基于标准的、与 Windows DNA 集成的程序设计模型,使 SQL Server 数据库和数据仓库的使用成为生成强大的可伸缩系统的无缝部分。这些功能使您得以快速交付 SQL Server 应用程序,使客户只需最少的安装和管理开销即可实现这些应用程序。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

第二章系统分析与设计

 

2.1 需求分析

 

 此次开发的网络聊天工具可作为个人的交流工具使用,通信的安全性不是很高,但要求信息的响应速度要较快,让用户充分享受到网络即时消息的方便和快捷。本聊天工具由服务器端程序和客户端程序两部分组成,整体采用JAVA平台开发,并使用SQL Server 2000管理数据库数据。服务器是可以监听和查看用户的基本操作;客户端程序面向实际用户,它有必要的界面的按钮,向用户提供网络即时消息的功能:

本聊天需包含如下基本功能:

1.客户端:

(1)新用户注册;

(2)用户登录验证;

(3)获取好友列表并显示好友状态(在线/不在线);

(4)添加用户好友;

(5)删除用户好友;

(6)用户与好友聊天(可查看聊天记录);

(7)接收系统信息。

2.服务端:

(1)启动和关闭后台服务器;

(2)查看客户端登录的相关信息(客户端登陆时间/登陆IP);

(3) 向所有在线用户发送系统消息。

 

2.2系统总体框架

 

2.2.1总体设计

网络即时通讯系统采用客户机/服务器(C/S)的模式来设计,是一个3层的C/S结构:数据库服务器->应用程序服务器端->应用程序客户端。系统采用C/S结构,可以将任务合理分配到客户机端和服务器端,从而降低了系统的通信开销,如图3.1所示:

3.1  C/S 体系结构

 


1.     客户层

客户层也叫应用层,是应用程序的用户接口部分。给聊天工具设计一个客户层具有很多优点,这是因为客户层担负着用户与应用间的对话功能。它用于检查用户的输入数据,显示应用的输出数据。为了使用户能直观地进行操作,客户层需要合作图形用户接口。若聊天用户变更,系统只需要改写显示控制和数据检查程序即可,而不影响其他两层。数据检查的内容限于数据的形式和值的范围,不包括有关业务本身的处理逻辑。

2.服务层

服务层也叫功能层,相当于应用的本体,它是将具体的业务处理逻辑编入程序中。例如,用户需要检索数据,系统设法将有关检索要求的信息一次性地传送给功能层;而用户登录后,聊天登录信息是由功能层处理过的检索结果数据,它也是一次性传送给表示层的。在应用设计中,必须避免表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理,达到优化整体设计的目的。

3. 数据层

据层就是DBMS,本系统使用了Microsoft公司的SQL Server 2000数据库服务器来管理数据。SQL Server 2000能迅速执行大量数据的更新和检索。因此,从功能层传送到数据层的“要求”一般都使用SQL语言。

2.2.2功能模块

聊天工具按如下过程完成通信:

l        客户向服务器注册,告知服务器它在监听某主题;

l        客户注册之后,向服务器发送消息;

l        服务器再把消息发送给所有监听些主题的客户。

聊天工具由服务器端和客户端组成,要分析清楚两方面所要完成的任务,对设计来说,等于完成了一半。根据聊天的通信步骤,系统的功能模块如图3.2所示:

 

即时消息系统

服务器端

客户端

后台操作

建立连接.

监听客户请求

用户登录消息

用户管理

好友管理

聊天功能

用户登录

用户注册

查找好友

添加好友

删除好友

发送消息

接收消息

聊天记录

数据库操作

发送系统消息

消息管理

3.2  功能模块

1.服务器端

服务器完成5大功能:建立连接、监听客户请求、操作数据库、查看用户登录消息和发送系统消息这5大功能的具体含义如下:

l        建立连接:系统启动时建立一个ServerSocket连接,绑定本地计算机的一个端口,不断侦听是否有客户端连接或者断开连接。

l        监听客户请求:服务器端是一个信息的枢纽,所有客户端的信息都要传到服务器端,再由服务器根据要求分发出去,客户端在向服务器发送各种请求,如:上线、隐身、获取我的好友、查找好友等等。

l        数据库操作:当客户机向服务器发送请求时,服务器需要通过数据库管理软件对数据库的数据进行增、删和查询。如录入用户信息、修改用户信息、查找好友数据库的资料以及添加好友数据到数据库等。

l        用户登录消息:在服务器端的界面上,我们可以看到用户的登录消息,包括IP地址、端口号,登录时间等。

l        发送系统消息:在客户端管理界面上,可以输入消息,并发送给所有的在线用户。

2.客户端

客户端完成3大功能:用户管理、好友管理和聊天功能,这些功能的含义如下:

l        用户管理:此功能又包括2个子功能,用户登录和用户注册。客户端与服务器端建立通信通道,向服务器发送新建用户的信息,接收来自服务器听信息进行注册。注册完毕后,可以通过系统的登录界面,输入账号和密码,然后发送到服务器进行验证。如果验证通过,则打开程序的主界面。

l        好友管理:此功能又包括3个子功能,查找好友、添加好友和删除好友。在程序的主界面,提供查找好友的功能。查找好友时,客户端向服务器发送查找好友请求,服务器端返回在线用户的信息,此时我们可以通过此来进行添加好友,并跟好友通过通信连接。

l        聊天功能:客户端在与好友端建立通信连接后,便可以与好友进行聊天,聊天时发送的是文本信息,好友端在接收到聊天消息后,会提示收到消息,并由好友端自主打开消息接收界面。所有的聊天消息都会被保存起来,可以查看与每个好友的聊天记录。聊天记录包括内容和时间。

 

2.3系统详细设计

 

2.3.1多线程设计

1.服务器端的多线程

服务器需要和多个客户端同时进行通信,这就是服务器端的多线程。一旦服务器发现一个新的客户端与之建立了连接,就马上新建一个线程与客户端进行通信。用多线程的好处在于可以同时处理多个通信连接,不会出于由于数据排队而发生的延迟或者丢失,可以很好利用系统的性能。

服务器为每个连接着的客户建立一个线程,为了同时响应多个客户端,需设计一个主线程来启动服务器端的多线程。主线程与进程结构类似,它在获得新连接时生成一个线程来处理这个这个连接。线程调度速度快,占用资源少,可共享进程空间中的数据,因此服务器的响应速度较快,且I/O吞吐量较大。在程序的代码里面,服务器端的多线程类定义为:

Class ServerThread extends Thread{//};

2.客户端的多线程

客户端能够完成信息的接收和发送操作,这与服务器的多线程概念不同,可以采用循环等待的方法来实现客户端。利用循环等待的方式,客户端首先接收用户输入的内容并将它们发送到服务器端,然后接收来自服务器端的信息,将其返回给客户端的用户。在程序的代码里面,客户端的多线程定义为:

class MainWin extends JFrame implements Runnable{//}

2.3.2数据库设计

数据库表主要用来存放用户的注册信息和用户的好友资料,可利用两张数据表用来存放用户信息和用户好友资料。在SQL Server 2000 上新建名为javaicq的数据库,并建立两张数据库表:用户的基本信息表(表名icq)和用户好友数据库表(表名friend.

1.icq

icq表存放用户信息,包括用户的号码(icqno)、昵称(nickname)、密码(password)、在线是否(status)IP地址(ip)、资料(info)、头像号(pic)、性别(sex)E-mail(email)和籍贯(place)等信息。利用SQL Server 2000建立数据表,如表3.1所示:

3.1   用户信息表

字段

数据类型

说明

icqno

int

用户的账号

nickname

char

用户的昵称

password

char

登录密码

satus

bit

在线是否

ip

char

登录的客户端IP地址

place

char

籍贯

pic

int

用户的头像对应的号码

sex

char

性别

email

char

电子邮件

info

char

用户的个性说明

2.frind

friend 表的设计比较简单,本系统设计了用户的号码和好友的号码两个字段。利用SQL Server 2000建立如下数据表:

3.2   好友信息表

字段

数据类型

说明

icqno

char

用户的账号

friend

char

好友的账号

2.3.3服务器的设计

1.主服务器类的设计

主服务器实现了服务器的多线程,服务器端有一个进程(或多个进程)在指定的端口等待客户的连接信息。一时连接成功,就可以按设计的数据交换方法和格式进行数据传输。客户端只在需要的时候向服务端发出连接请求。主服务器类调用ServerThread类,而每个ServerThread实体就是一个单独的线程,即对应于客户端连接请求响应的线程。它的执行过程如下:

l        使用ServerSocket s=new ServerSocket(8000)语句 绑定8000端口创建套接口

l        使用Socket=s.accept()来监听用户的请求

l        使用new ServerThread(socket)语句创建新的线程。

 

2.ServerThread类的设计

客户端发送连接请求的时候,服务器端创建一个ServerThread(socket)线程。ServerThread类的函数执行过程可描述如下:

l        执行ServerThreadz(Socket s)线程构造函数

l        执行socket=s取得传递参数;

l        BufferedReader(new InputStreamReader(socket.getInputStream()))创建输入流;

l        使用PrintWriter(new BufferedWriter( new OutputStreamWriter( socket.getOoutputStream)))创建输出流;

l        使用start()函数启动线程;

l        最后使用run()线程监听函数。

3.登录验证

1)登录线程

 如果客户端输入的字符串“login,表示需要登录,那么服务器在接收到该信息后连接数据库,准备从数据库选择昵称和密码。服务器接收到客户端发送过来的号码和密码信息后,设定数据库查寻条件,并执行数据库查寻,通过比较输入的用户名和密码和数据库信息来确定用户的登录是否成功,如果成功就,发送“ok”给客户端,通知其进入聊天主界面.反之发送“false,提示用户登录失败,如图3.3所示:

客户端

服务器端

Socket

读取数据库,并验证账号与密码

发送:“login

接收:账号和密码

接收:“login

监听用户请求

发送:账号和密码

ServeSocket

接收:“ok

发送:“ok

 

打开程序主界面

IP地址和在线状态录入数据库

数据库

结束

 

通知好友

3.3   登录流程

2)通知好友

通知好友也是在ServerThread类的run()函数里面,当某一用户成功登录后,发送“getwhoaddme”到服务器端,服务器端查找数据库中的“friend”数据表,并把用户的所有好友消息及在线状态发送回客户端,客户端通过这些好友的消息,向在线的好友发送上线通知。

4.新建用户

用户新建过程也在线程监听函数run()中。当服务器端收到客户端发送的“new”请求时,服务器端开始进行新建用户操作。新建用户的过程是这样的:首先要使用权Class.forName方法加载数据库驱动类,该类的描述是sun.jdbc.odbc.JdbcOdbcDriver;然后使用DriverManager.getConnection方法连接数据,数据库名为jdbc:odbc:javaicq;最后服务器接收客户端用户发送的昵称、密码、用户E-mail,个人资料、籍贯和头像等信息,执行数据库添加操作完成用户的创建。服务器为新建的用户指定唯一的注册号码,将以即时消息的方法发送给用户。

5.好友处理

(1)查找好友

当客户端向服务器查找好友的请求后,服务器立即响应并调Class.forName方法加载数据库驱动类sun.jdbc.odbc.JdbcOdbcDriver,然后调用方法DriverManager.getConnection完成数据库的连接,得到用户好友查询的结果。查询结果包括:好友的昵称、性别、性别、籍贯、个人资料等信息。服务器对数据库听查询结果进行筛选,只向客户端的用户返回好友的注册号码、头像信息号以及是否在线信息。客户端接收到查询结果后,利用相应的函数将其显示出来。

(2)添加好友

读取资料功能是在查找好友功能基础上建立的。用户得到好友列表后,可根据需要读取好友的详细资料,也可读取用户自己的详细资料。服务器使用Vector矢量保存客户端用户的好友号码,并返回好友的昵称、号码、IP地址、状态、头像和个人资料等信息。

(3)添加好友

服务器响应客户端用户的请求后,首先连接数据库,并根据接收的用户号码及好友号码向好友表添加记录。服务器使用r6保存查询结果。若r61,则表明添加好友成功,服务器将给客户端发出“ok addfriend”的消息;否则添加好友失败,服务器将给客户端发出“falseaddfriend”的消息。

(4)添加好友应答

如果服务器收到其它用户添加我为好友的请求后,连接数据库,根据接收用户号码及好友号码向好友表添加记录。若添加成功,则向用户传递好友的基本信息,比如昵称。服务器利用r5保存处理结果,并向客户端输出结果。

(5)删除好友

当服务器接受到客户端删除好友请求后,它连接数据库,并根据接收的用户号码及好友号码表记录删除。服务器利用r7保存删除结果,若r71,则删除成功,服务器给客户端发出“ok delfriend”的消息;否则删除好友失败,服务器给客户端发出“false delfriend”的消息。

接收好友处理请求

addnewfriend

delfriend

 

Addfriend

 

friend

 

find

 

查找好友

读取好友资料

添加好友

添加好友应答

删除好友

Yes

No

Yes

Yes

Yes

Yes

No

No

No

返回

3.4   处理好友请求

6.退出下线

用户在线时,数据库表的IP地址字段为此时用户计算机的真实IP地址;状态字段为1。若用户退出下线,客户端向服务器端发送“logout”,服务器接收到下线请求时,需完成修改IP字段和状态字段。服务器首先利用Class.forName方法加载数据库驱动类sun.jdbc.odbc.JdbcOdbcDriver;然后通过方法DriverManager.getConnection连接数据库存;最后根据用户号码,将其状态字段设为0IP地址字段设为空。

2.3.4客户端的设计

客户通过Socket与服务器建立连接。服务器与客户都通过构造BufferedReaderPrintWriter来建立输入/输出流,双方通过该输入/输出流来相互传递信息。一旦收到客户方的连接请求,服务器利用accept()函数返回一个新建的Socket对象,随后客户端向服务器发送消息,诸如注册、登录和查找好友等请求,服务器收到请求后,针对不同的消息处理请求。在这一过程中,服务器端与客户端采用UDP协议通信。虽然UDP协议不可靠,但对于聊天工具而言,其可靠性并不太重要。

1.用户注册

当服务器收到用户的注册请求后,开始接收客户传递的消息,诸如客户的昵称、性别、籍贯、头像和个人资料等信息。接收完毕后,服务器便通过JdbcOdbc与后台数据库连接,向数据库添加记录。

若新用户注册,则向客户返回号码,并在数据库中注册用户的IP地址,设定Status值告知用户在线。客户收到服务器返回的消息后,打开主程序窗口,同时创建UDP以便在用户之间建立联系。注册通信过程如图3.5所示:

Socket

接收完毕

发送:“new

发送完毕

接收:注册信息

接收:“new

监听用户请求

发送:注册信息

ServeSocket

接收:账号

输出:账号

 

打开登录界面

结束

数据库

操作

客户端正

服务器端

3.5   注册流程

2.用户登录

用户在客户端程序中输入用户号码与密码,与服务器建立连接,向服务器发送登录请求。服务器收到该请求后,通过JdbcOdbc读取数据库,与用户输入的消息做比较:若用户输入的信息与数据库信息相同,则服务器向客户返回成功消息,将其Status字段设为1,并注册用户当前的IP地址;否则服务器向客户返回失败消息。客户端收到服务器的成功确认后,打开聊天主窗口;否则弹出失败信息。客户端事件驱动与服务器端的事件监听相对应。

3.服务器连接

服务器连接是在ConnectServer()函数中实现的。本函数用到了具有连接性、有序性特点的流,根据服务器的IP地址和端口来完成客户端与服务器的连接。IP地址是网络中唯一地址的标识。服务器连接过程分服务器端与客户端两部分,执行流程如下:

1)服务器程序流程

l        程序初始化;

l        填写本机地址信息;

l        绑定并监听一个固定的端口;

l        收到Client的连接后建立一个Socket连接;

l        产生一个新的进程与Client进行通信和信息处理;

l        子通信结束后中断与Client的连接。

2)客户端程序流程:

l        程序初始化;

l        填写服务器地址消息;

l        连接服务器;

l        与服务器通信和信息处理;

l        通信结束后断开连接。

4.主程序设计

用户完成登录后, 客户端与服务器端建立连接。连接建立成功后,客户向服务器请求读取好友名单;服务器收到该请求,开始读取数据库中的friend表并得到好友的号码,再通过jcq表读取好友资料,向客户端发送这些信息;客户收到服务器消息后,在主窗口显示好友。客户端还建立矢量来存储好友的昵称、号码,头像编号和IP地址等信息。

5.好友管理

1)查找好友

好友查找可利用FindFriend2 类完成,FindFriend2类继承自JFrame类。FindFriend2中定义的界面控件包括:好友的昵称、性别、住址、Jicq号码、IP地址、在线状态、头像、电子邮件和个人留言等信息。

查找好友所需的网络变量定义如下:

Socket socket: 连接socket

BufferedReader in;读入缓冲区

PrintWriter out;输入缓冲区

int myid;用户的号码

String serverhost:发送端的主机地址

int servport:服务端的主机地址

DatagramPacket sendPacket:存储发送信息的发送数据报

DatagramSocket sendSocket:存储接收信息的接收数据报

int sendPort:发送的端口号

2)添加好友

用户添加好友是聊天工具的基本功能之一。添加好友的基本步骤如下:

用户A登录后,向服务器发送查找请求,服务器响应并读取数据库表icq,将结果返回给用户;

用户在收到查询结果后选择用户B,向服务器发送添加好友请求,服务器收到请求响应,更新数据表frriend,并从icq表中读取好友基本信息,将信息返回给用户A

用户A的客户端主窗口显示用户B,并通过UDP通知用户B

用户B收到服务器的确认消息,可决定是否添加用户A为好友。

3)删除好友

用户可以删除好友列表中指定的好友,客户端确认用户操作后向服务器发送删除请求,服务器收到该请求,连接数据库表friend并删除用户及该好友的记录。若删除成功,则向客户端返回成功消息,通知用户。

2.3.5消息通信的设计

消息的发送主要是通过数据报服务来实现的。JAVA实现数据报通信的过程除面向连接的Socket外,还有无连接的数据报Socket。数据报是网络层数据单元在介质上传输信息的逻辑分组格式,它是是一种在网络中传播的、独立的自身包含地址信息的消息,它能否到过目的地,到过的时间,到过内容是否变化是不能准确知道的。数据报的通信双方不需要建立连接,对于像聊天通信这些不需要很高质量的应用程序来说,数据报通信是一个非常好的选择。

1、使用数据报

javajava.net包中有两个类DatagramSocketDatagramPacket,它们为应用程序采用数据报通信方式进行网络通信提供了支持。其定义定义如下:

DatagramPacket sendPacket,receivePacket;

DatagramSocket sendSocket,receiveSocket;

int udpPORT=5001;

int sendPort=5000;

sendSocket=new DatagramSocket();  

receiveSocket=new DatagramSocket(udpPORT);

2、发送消息

用户通过好友列表中好友的IP地址,利用UDP协议与其他用户进行信息交流。消息发送之前先创建一个数据报文包,用来实现无连接的包传送服务。每个数据报文包是用DatagramPacket类来创建的,DatagramPacket对象封装了数据报包数据、包长度、目标地址和目标端口。若客户端发送数据包,则构造函数创建DatagramPacket对象,将需要发送的数据和包文目的地址信息放入对象之中。

在发送的过程中利用构造函数DatagramPacketbyte bufferedarray[],int length,InetAddressaddress,int port)构造一个包长度为length的包,它是将数据传送到指定端口号上的数据包,参数length必须小于等于bufferedarry.length.消息发送是通过调用DatagramPacket对象中有send方法实现的,它需要以DatagramPacket对象为参数,将刚才封装进DatagramPacket对象中的数据组成数据报发出。

发送数据报文包的部分代码如下:

sendPacket=newDatagramPacket(data,data.length,InetAddress.getByName(theip.trim()),sendPort);

sendSocket.send(sendPacket);}

/*data为数据报文包,data.length为数据报文包的长度InetAddress.getByName(theip.trim()为获取接收者的IP地址;

sendPort为数据报文包接收者的接收端口。*/

发送消息流程如下图所示:

从输入消息对话框读取信息

获取好友的IP地址

在线不?

发送消息

结束

保存聊天记录

3.6   发送消息

 

3.监听好友的消息

为了监听好友的消息,系统首先定义一个数组,该数组用于接收用户消息中的数据;然后创建数据报,使用receiveSocket.recerive(receivePacket)函数等待并接收数据报,取得数据报中的数据。

接收数据报文包的部分代码如下:

receivePacket=new DatagramPacket(array,array.length);

receiveSocket.receive(receivePacket);

byte[] data=receivePacket.getData();

String infofromip= receivePacket.getAddress().getHostAddress(). toString().trim();

received=new String(data,0,data.length);

/*其中receivePacket用来接收其它客户端发送过来的数据报文包;data用来储存数据报文包的数据;infofromip用来获取数据报文包的发送地址;received用于储存二进制类型数据转换为字符串类型后数据。*/

 

监听好友消息的流程如图3.7所示:

接收数据报信息

addnewfriend

system

 

oneaddyou

 

offline

 

oneline

 

好友上线

好友下线

添加好友应答

 

添加好友应答

接收系统消息

Yes

No

Yes

Yes

Yes

Yes

No

No

No

查找对应好友及其登记IP

IP存在

 

接收好友消息

接收陌生人消息

else

3.7   监听好友消息

1)当接收好友消息时,主程序弹出一个对话框,由用户自行选择接收信息与否,用户可根据消息提示,打开相应好友的接收消息对话框来接收消息。

l        DatagramPacket类提供了4个函数来获得消息:

l        Public bye[] getDate(): 返回一个字节数组,包含收到或要发送的数据报中的数据;

l        Public int getLength(): 返回发送或收到的数据的长度;

l        Public InetAddress getAddress(); 返回一个发送或接收此数据报报文的机器的IP地址;

l        Public int getPort(): 返回发送或接收数据报的远程主机的端口号。

 

接收消息的流程图3.8所示:

监听到好友发送过来的消息

打开接收消息对话框,接收消息。

接收不?

保存聊天记录

结束

3.8   接收消息

2)上线和隐身

当用户想处于非聊天状态的时候,可以切换至隐身状态。这时候,用户的客户端会查找所有在线的好友,并发制作数据包,发送“隐身”要求给所有好友的客户端。在好友的程序界面上,用户的头像由彩色变成黑白。此时,所有好友都无法发送消息给此用户。当用户想点击程序界面的“上线”按钮时,既可通知所有的好友此用户上线了。

 

 

 

 

 

 


 

第三章 系统实现

 

3.1数据库部署

 

3.1.1建立数据库

 本系统使用的数据库管理系统为微软公司开发的SQL Server 2000。服务器所在的计算机上安装此工具。安装好之后,打开SQL Server 的“企业管理”,可通过可视化操作,建立一个名为“javaicq”的数据库,并在在此数据库中,建立两张数据表,第一张表名为“icq”,用来储存用户基本信息;第二张表名为“friend”,用于储存用户的好友信息。

建立数据表的定义如图4.1和图4.2所示:

4.1  个人信息

 

4.2  好友消息

 

 


3.1.2 配置ODBC数据源

由于在此系统中,采用的是通过ODBC的方式来连接数据库的,所有在使用数据库之前,我们必须在Windows的操作系统下,配置好ODBC,建立数据源。当服务器对数据库进行操作的时候,通过ODBC配置的相应数据源来对数据库进行增、删、改和查询。

配置ODBC的步骤如下所示:

l  打开操作系统的控制面板(相对Windows XP而言)

l  打开管理工具->数据源(ODBC)

l  在系统DSN那里,新建一个名字为“javaicq”的系统数据源,驱动程序为SQL Server

 如图4.3所示:

4.3  配置ODBC

 

3.2 开发环境

 

3.2.1 构建Java SE平台

本系统是使用JAVA语言进行开发的,系统的开发和运行都需要Java虚拟机的支持。所有我们要预告下载和安装java的开发工具箱JDKJava Development Kit),我们对Sun公司官方网 http://www.sun.com/download/ 上去下载我们所需要的软件。

下载并安装JDK Java 的运行环境,我们还需要设置一些系统变量:

l        ath:该变量的含义是系统在任何路径下都可以识别Java命令需要设置的变量。

l        JAVA_HOME: 该变量的含义是Java的安装路径

l        Classpath:该变量的含义是为Java加载类的路径。

3.2.2 安装开发工具 eclipse

构建好Java SE平台后,需要选择java的开发工具。目前比较流行的开发工具有:Jbuild ,Netbeans ,Eclipse,各有各的特色和优点。本系统使用的是:Eclipse是一种可扩展的开放源代码IDE,具有框架灵活、扩展容易等特别。

为了实现可视化编程,提高编程的效率,我们需要下载针对Eclipse的可视化插件:Visual Editor,并下载相应的类库EMFGEF。安装了这些插件,我们就可以很轻松地设计出美观的程序运行界面。

    

3.3 服务器端的实现

 

3.3.1 启动服务器后台

 启动数据库服务器后,可利用Eclipse来启动服务器的管理界面,如图4.4所示,我们点击“启动服务器”按钮,即可启动服务器的后台,并且不断地监听客户端发送的请求。启动后对界面的大文本区域显示了:

Sun May 31 20:16:51 CST 2009启动服务器... ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8000]

其含义为:系统时间+"启动服务器..."+连接端口信息

4.4  服务器界面

 

3.3.2 查看系统的记录

点击“查看系统记录”时,在服务器管理界面的大文本区域,可查看客户端的登录情况。如图4.4 所示。

登录信息如下:

Sun May 31 20:22:03 CST 2009ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8000]建立连接:Socket[addr=/222.16.62.144,port=2923,localport=8000

其含义为:系统时间+服务器端口信息+“建立连接”+客户端登录信息

3.3.3 发送系统消息

在服务器管理界面的小文本框输入要发送的消息后,点击“发送系统信息”按钮,服务器会向数据库进行操作,查找所有在线的用户,读取用户的IP地址,制作数据报文包,并可向所有的在线用户发送系统消息。

 

3.4 客户端的实现

 

3.4.1 用户注册

要想登录即时消息系统,必须向服务器申请一个登录账号。通过注册功能可实现,其运行界面如图4.5所示:

4.5  注册界面

 

为了保障系统的安全性和数据库完整性约束,我们对用户输入的消息进行了完整性检查,如用户名和密码的字符数不能多于20个字符,个性说明的字符数不能多于100个。当用户输入了所有的注册消息之后,点击“确定”,系统检查消息的正确性,并发送注册消息到客户端,客户端返回用户所注册的账号.

3.4.2 登录

用户可通过登录界面进行登录,其界面图4.6所示:

4.6  登录界面

 

 

输入账号、服务器的地址和端口号之后,点击“确定”按钮,向服务器发送登录请求,如果账号和密码正确,则系统打开程序的主界面,否则返回登录失败消息。

3.4.3程序主界面

用户登录成功后,可看到程序的主界面如图4.7所示(登录两个用户):在界面的中间为好友列表框,显示当前用户所有的好友,并显示在线状态。如果头像为彩色,表示在线;黑色则表示不在线或隐身。主界面上还有“查找”、“更新”、“直接加友”、“陌生人”、“上线”和“隐身”按钮,用户可通过点击按钮进入相应的功能。

 

 

 

 

 

   

 

 

 

 

 

用户:醉生梦死

用户:QQ

 


      

4.7  主程序界面

 


3.4.3 添加好友

在程序主界面中点击“查找友”按键后,进入好友查找界面,如图4.8所示:

4.8  查找好友界面

   

点击相应的好友,选择“加为好友”,即可服务器发送添加好友请求,并向该用户发送添加好友通知。该用户收到该消息后,可以选择也添加此人为好友,也可以选择不添加。

3.4.4 上线与隐身

当用户希望不被好友打扰的时候,用户可以点击程序主界面上的“隐身”按钮。此时用户的程序向服务器端和所有在线的用户发送“隐身”声明。在好友的好友列表中,此用户的头像变为黑白,并且不能对此用户进行消息的发送。当用户希望重新接收消息的时候,可点击“上线”按钮,向服务器和所有的在线好友的客户端发送上线通知,使其的头像显示为彩色。

3.4.5 聊天通信

1、发送消息

在好友列表里面,点击相应的头像,在弹出的菜单中选择发送消息,则会弹出发送消息对话框,如图4.9所示,用户可以在文本框内输入消息并发送。

4.9   发送消息

 

 


 2、接收消息

当用户接收到好友发送的消息时,会收到消息提示,如图4.10所示。这时可以在相应的好友列表里,点击头像,在弹出的菜单中选择接收消息,则会弹出

接收对话框,如图4.11所示:

4.10  消息提示

4.11  接收消息界面

 

 


 3、聊天记录

当用户想查看与某位好友的聊天记录时,可以点击其头像,在弹出的菜单中选择聊天记录,则会弹出聊天记录对话框,其中聊天记录内容包括:用户名+消息+时间,如图4.12所示:

4.12  聊天记录界面

 

 

 

 

 

 


 


第四章 总结

 

    本文主要讨论了基于 TCP/IP 协议的网络即时消息系统的研究与实现。课题研究了三层 C/S 模型和,有效减轻服务器负担,提高了网络利用率。该系统采用 ODBC接口访问 SQL Server 数据库,实现了系统后台数据库的设计,提高了系统数据的维护和备份能力。该即时消息系统按照面向对象方法设计,并在J2SE平台上,使用java语言进行开发,并且采用了多线程技术和网络编程技术。这些方法和技术有效增强了服务器的并发处理能力,同时也有利于系统开发与再维护工作的开展。

本系统具有以下特点:

l        采用 C/S通信模型设计,有效减轻了服务器的负担,便于后台的管理。将任务合理分配到 Client端和Server端来实现,降低了系统的通讯开销。

l        采用了Java语言,因为用Java设计的系统是跨平台的,在任何操作系统上,只要安装了Java虚拟机,就可以运行本系统,不用受平台的限制。

l        在客户端都和服务器端都实现了多线程编程技术,以提高系统的效率。使用线程可以把占据长时间的程序中的任务放到后台去处理。

本系统这实现了网络聊天工具所具备的基本功能,即注册、登录、查找好友,添加好友、发送消息、接收消息、接收系统消息等,还添加了一些特色功能,如隐身,头像的变化等。本系统实现了一个友好的操作界面,简单,易用,适合用户的操作习惯。

该系统具备了网络聊天工具所具备的基本功能,但还有一些功能还没完善,如用户聊天之间的方式仅限于文本通信,还没实现文本传输功能。还没实现修改用户资料的功能等。系统或许存在一些未知的Bug,还需要进一步的改进和测试。在以后的研究中,我还会研究安全通信协议,保障通信的安全,提高系统的实用性等

本课题需要继续完善的功能有:

l        加入文件传输功能,丰富用户的信息交流方式;

l        深入学习java可视化编程,完善操作界面,使其更加适合用户的操作习惯;

l        设计安全通信机制,保障通信的安全;

l        设计测试用例,全面、系统地测试该系统所存在的一些缺陷;

l        扩展即时消息系统的服务范围,增强系统工作的稳定性和健壮性。

 

 

 

 

 

 

 

 


 

参考文献

 

[1]  王晋海.即时消息系统的研究与实现:[硕士学位论文].广州:暨南大学通信与信息系统,2004.

[2] 宋国龙.浅谈即时消息软件的开发技术.山西:山西电子技术出版社,2003.

[3] D. Mark,R. Jonathan,S.Sugano.RFC2778 : A Model for Presence and Instant Messaging . IETF.2005.

[4] 王群.计算机网络教程.北京:清华大学出版社,2005.12.

[5] ()W.Richard StevensTCP/IP Illustrated Volume 1:The Protocols.北京:机械工业出版社,2001

[6] 庞丽娜.Java SE 应用开发技术详解.北京:科学出版社,2007.

[7] Kathy Walrath,Mary Campione Alison Huml,Sharon Zhakhour,邓一凡夫,余勇,罗云锋译.JFC Swing 标准教材.北京:电子工业出版社,2005.

[8] Jim Beveridge & Robert Wiener ,侯捷译.Win32 多线程程序设计.武汉:华中科技大学出版社,2002.

[9]  求是科技.SQL Server 2000 数据库开发技术与工程实践.北京:人民邮电出版社,2004

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

致谢

经过两个多月的努力,这次毕业设计总算接近完成,作为一个没多少实践经验的本科生,突然面对这一系列的研究和开发工作是在会有许多困难和手足无措的时候,如果没有导师的督促指导,以及班级内其他同学的支持和帮助,要完成这个设计可以说是困难重重。

非常感谢我的导师鲍江宏老师。老师给了我一个很好的研究课题,使我得以在这个课题的研究中学习非常多的知识,把我大学四年所学的知识得以应用到实践当中去。老师在平日工作繁忙的时候,给予了我悉心的指导,指导我们怎样写论文、论文要注意的要点等等。除此以外,在开发阶段许多技术性的问题,也多得身边同学们的互相帮助,共同探讨,才能得以解决各种难题。

其次要感谢的是大学期间所有的任课老师,他们的教给我的,不仅仅是知识,还有一种对待学问的态度,对待生活的态度,他们教给我的这些无价之宝,将会让我在将来走得更加自信,更加顺畅。同时,所有的同学,4年的风雨与共,一起拼搏一齐享受,让我学到了数不尽的道理。

另外,我要感谢论文参考文献的原作者。这些专家、学者的研究成果,为我的论文写作提供了许多帮助。

最后要感谢理学院和华南理工大学四年来对我的大力栽培。

 

谢谢!