视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
网络即时通讯系统
2025-09-30 19:48:10 责编:小OO
文档
计算机与现代化 2008年第4期

JIS UAN JI YU X IAN DA I H UA

总第152期

文章编号:1006 2475(2008)04 0051 03

收稿日期:2007 04 25

作者简介:雷东升(1974 ),男,河南驻马店人,北京工业大学实验学院信息工程系讲师,研究方向:软件工程。

网络即时通讯系统

雷东升

(北京工业大学实验学院,北京100024)

摘要:网络即时通讯系统是通过网络实现在线交流的工具软件。系统基于C li ent/Server 架构,用Java 语言和SQL 2000作为开发工具,采用Socke t 编程和多线程技术设计并实现。系统能够完成用户注册、用户登录、消息通信、好友管理、在线聊天等功能。

关键词:C /S 结构;多线程;Socket 中图分类号:T P393 文献标识码:A

Net work Synchronous Co mm unication Syste m

LE I Dong sheng

(Experi m enta l Coll ege ,Be iji ng U n i versity o f T echno l ogy ,Be iji ng 100024,Ch i na)

Ab stract :N et wo rk synchronous co mm un ica ti on syste m is a too l so ft ware to communicate on li ne through i n ternet .W it h Java and S QL 2000,net work synchronous communicati on system based on C /S structure is rea lized by adopti ng So cket prog ra mm i ng and mu ltithread i ng techno logy .M any functi ons ,such as ,user reg istra ti on and l ogg i ng i n ,m essag e co mm un ica ti on ,friends m anage m ent and chatti ng on line ,can be fulfilled .K ey w ords :C /S struct ure ;m ultithreadi ng ;Socke t

0 引 言

网络即时通讯系统可作为公司和企业内部的交

流工具使用,既充分利用了网络资源,又保证内部信息的安全。本系统由服务器端程序和客户端程序两部分组成,整体采用Java 平台开发,使用SQL Server 2000进行数据库管理。服务器是后台支持程序,运行的界面仅是一个交互式窗口;客户端程序面向实际用户,通过简单的界面和按钮,实现即时网络通信的功能。

1 系统的总体设计

即时通讯工具采用C /S 模式(客户端/服务器端

模式)设计,是一个三层的C /S 结构(如图1):数据库服务器 应用程序服务器端 应用程序客户端。系统采用C /S 结构,可以将任务合理分配到客户端和服务器端,

从而降低了系统的通信开销。

图1 3层C /S 结构示意图

1.1功能模块划分

网络即时通讯系统主要由两大功能模块组成,如图2所示。即时通讯工具完成通信过程:

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

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

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

服务器端功能:建立连接、操作数据库和监听客

52 计 算 机 与 现 代 化2008年第4期

户。

建立一个ServerSocket 连接,不断监听是否有客户端连接或者断开连接。

服务器端是一个信息发送中心,所有客户端的信息都传到服务器端,再由服务器端根据要求分别发送出去。

数据库数据操作包括录入用户信息、修改用户信息、查找好友数据库的资料以及添加好友数据到数据库等。1.3客户端

客户端功能:新建用户、用户登录、查找好友和即时通讯。

客户端与服务器端建立通信通道,向服务器端发送新建用户的信息,接收来自服务器的信息进行注册。

客户端与服务器端建立通信通道,向服务器端发送信息,完成用户登录。

查找好友是客户端必须实现的功能,此外,用户通过客户端可以查看自己和好友的信息。

客户端可完成信息的编辑、

发送和接收等功能。

图2 功能模块

2 系统的多线程设计

即时通讯系统的设计使用多线程技术。在标准Java 包中提供了相当完善的针对网络通信和I/O 相关操作的类库,利用这些类,可以在很短的时间内设计出一个网络交互系统。2.1服务器端的多线程

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

服务器为每一个连接着的客户建立一个线程,为了同时响应多个客户端,需设计一个主线程来启动服务器端的多线程。主线程与进程结构类似,它在获得

新连接时生成一个线程来处理这个连接。线程调度

速度快,占用资源少,可共享进程空间中的数据,因此服务器的响应速度较快,且I/O 吞吐量较大。2.2客户端

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

3 数据库设计

数据库表主要用来存放用户的注册信息和用户的好友资料,利用两张数据库表分别存放此两项资料,即:用户基本信息数据库表(icp)和用户好友数据库表(friend)。

用户基本信息数据库表(icp)包括:用户的号码、呢称、密码、状态、I P 地址、资料、头像号、性别、E m ail 和籍贯等信息。其中,呢称和密码是必须字段;号码和状态由系统自动设置;其余为可选字段。

用户好友数据库表(friend)包括:用户的号码和好友的号码,这两个字段都是必须字段。

4 服务器端设计

4.1主服务器类的设计

设计服务器需要考虑因素:

服务器的运行速度;

服务器的响应速度,包括新建连接和发送数据的响应速度;

I/O (input/outpu,t 输入/输出)吞吐量;流量控制、安全性。

主服务器类实现了服务器端的多线程,即时用Server Socket s=ne w ServerSocket(8080)语句在8080端口创建套接口;使用ne w Server T hread(socket)语句创建新的线程。主服务器类调用Server T hread 类,而每个Ser ver Thread 实体就是一个单独的线程,即对应于客户端连接请求响应的线程。服务器端有一个或多个进程在指定的端口等待客户的连接信息,一旦连接成功,就可以按设计的数据交换方法和格式进行数据传输。客户端只在需要的时候向服务端发出连接请求。

4.2服务器完成的功能

服务器主要实现登录验证、新建用户、好友处理、查找好友、读取资料、添加好友、删除好友、退出下线等功能。其中新建用户模块的实现如下:

新建用户是即时通讯工具的一个基础功能。新建用户也在线程监听函数run(),具体过程:首先使

用C lass.fo r N a m e方法加载数据库驱动类,描述是sun.j d bc.odbc.Jdbc Odbc Driver;然后使用Driver M an ager.get C onnecti o n方法连接数据,数据库名为j d bc: odbc:javaicq;最后服务器接收客户端用户发送的呢称、密码、E m a il、个人资料、籍贯和头像等信息,执行数据库添加操作完成用户的创建。服务器为新建的用户指定唯一的注册号码,并将号码以即时消息的方法发送给用户。

5 客户端设计

客户通过Socket与服务器建立连接。服务器与客户端都通过构造Bu fferedReader、Pri n W t riter来建立输入/输出流,双方通过该输入/输出流来相互传递信息。一旦收到客户方的连接请求,服务器利用accept ()函数返回一个新建的Socket对象,随后客户端向服务器发送消息,诸如注册、登录和查找好友等请求,服务器收到请求后,针对不同的消息处理请求。在这一过程中,服务器端与客户端采用UDP协议通信。 客户端主要实现用户注册、用户登录、消息通信和好友管理功能。其中消息通信模块的实现如下: 5.1创建数据报

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

5.2发送信息

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

在发送的过程中利用构造函数Datag ra m Packet (byte bu fferedarray[],i n t leng th,Ine t A ddressaddreaa, i n t po rt)构造一个包长度为leng t h的包,它是一个将数据传送到指定主机指定端口号上的数据报文包,参数leng th必须小于等于bufferedarry.leng t h。消息发送通过调用D atagra m Socket对象的send方法实现,它需要以Datag ra mPacket对象为参数,将刚才封装进Datag ra m Packet对象中的数据组成数据报发出。

5.3监听好友消息

系统首先定义一个空数组,该数组用于接收消息中的数据;然后创建数据报,使用rece i v eSocke.t re ceive(rece i v ePacket)函数等待并接收数据报,取得数据报中的数据。根据取得数据的类型,将判定好友是否上线:若有好友上线,则好友的头像变彩色;若有好友下线,则好友头像变为灰色。

5.4接受消息

为了接收从服务器返回的结果数据报文包,需要创建一个新的Da tagra mPacket对象。该对象利用了Datag ra m e Packet类的另一种构造方式Datag ra m Packe t (byte bufferedarry[],i n t l e ngth),只需指明存放接收的数据报的缓冲区和长度。系统可调用Datagra m Socket对象receiver()函数来接收数据报,并将Data gra mPacket对象作为该函数的对象。rece i v e()方法会一直阻塞直至收到一个数据报文包,而该数据存放在Datagra mPacket对象的缓冲区中。数据报文包还包含了发送着的I P地址和端口号等信息。

6 结束语

本系统采用当前比较流行的Socket编程和多线程技术,系统基于C/S架构,能够在局域网上实现多人在线聊天功能,使用简单、界面友好,但是系统在安全性能方面还需要考虑。

参考文献:

[1] 殷兆麟,张永平,姜淑娟.Java网络高级编程[M].北京:

清华大学出版社,北京交通大学出版社,2005.

[2] 求是科技.Java信息管理系统开发[M].北京:人民邮电

出版社,2005.

[3] 雷之宇.Java项目开发实践 网络篇[M].北京:中国

铁道出版社,2005.

[4] Pau lN ielsen.M icroso ft SQL Server2000宝典[M].北京:

中国铁道出版社,2004.

[5] 黄凯,陶宏才.即时通讯系统服务器端简要设计[J].成

都信息工程学院学报,2006,21(4):535 538.

[6] 钟珞.软件工程学[M].北京:清华大学出版社,2005.

[7] 王大锋,刘在强,冯登国.P2P即时通讯软件监控系统的

研究与实现[J].计算机工程与应用,2005,41(10):128

130,147.

[8] 彭力,汪秉文.即时通讯软件服务器的设计与实现[J].

微机发展,2004,14(10):6 8.

[9] 丁忠,刘志勤.多服务器分布式即时通讯系统模型的设

计[J].微计算机信息,2006,22(27):181 183.

[10] 黄荣升.一种基于扩展SIP协议的即时通讯系统设计

与实现[J].现代电子技术,2006,29(11):56 58.下载本文

显示全文
专题