APP下载

一种小型实用即时网络聊天通讯系统的设计

2011-04-10中国电信荆州分公司湖北荆州434020

长江大学学报(自科版) 2011年34期
关键词:服务器端接收端线程

(中国电信荆州分公司,湖北 荆州434020)

随着互联网技术和计算机技术在不断进步,通过互联网进行通讯交流的人越来越多,聊天通讯系统也在不断地优化,开发设计技术也在不断地提高。下面,笔者基于Java语言对一个小型实用即时网络聊天通讯系统的实现展开分析和设计。

1 系统的总体设计与实现

整个系统的总体实现如图1所示。客户成功登录后将创建一个线程来接收服务器端的信息并进行处理,同样,服务器端接收到一个连接后就为这个连接创建一个线程来对客户的操作进行处理。在服务器端打开之后就创建了一个数据源,为客户服务的线程在需要访问数据库的时候就从服务器端的数据源里取一个数据库的连接来进行数据库操作,减少了频繁的数据库连接和释放的次数,提高了效率。

图1 整个系统的总体实现

客户端与服务器端之间的消息都是一个个实现了Message接口的对象,Message接口有一个方法getType(),该方法返回该对象的类型,在发送和接收的时候都是直接对Message类型的对象进行操作[1]。这样的好处就是在接收发送信息时可以统一处理。Message接口的定义如下所示:

具体的消息类型都已经在PackageType里面进行定义,而具体的消息类在构造时就要为type斌一个相应的值.目前系统用到的消息类和其相应的在PackageType里定义的type值如表1所示。

具体的消息类因为要通过网络进行发送因此必须实现Serializable接口,同时要实现Message接口。下面就聊天内容消息类对具体消息类的实现进行分析。

表1 消息包和其对应的type值

在每个具体消息类里面都有一个成员type,用来标识消息的类型,实现getType方法返回type,同时type在构造函数中进行赋值。

2 登录过程的设计与实现

登录的信息在登录窗口进行输入,登录过程则调用客户端主窗口的方法来实现,如果成功登录登录窗口就退出,显示客户端主窗口,如果登录不成功就弹出提示框,用户可在登录窗口修改输入的信息再进行登录。登录过程的顺序为:①客户端连接服务器端。用公钥加密生成的密钥,把加密的密钥发送到服务器端;服务器端用私钥解密接收到的密钥,设置加密密码;②客户端对用户的密码进行加密,发送验证信息;服务器端验证用户信息,返回验证结果,如果失败就关闭socket,结束过程;③客户端验证失败就提示失败,结束过程;验证成功就显示主窗口,发送自己的状态信息;服务器端读取客户的状态,发送用户的信息;④客户端接收自己的信息,存储下来,服务器端发送客户的好友列表;⑤客户端读取好友列表。

3 注册过程的设计与实现

注册的信息在注册窗口输入,注册过程就与服务器建立一个连接,把注册时填的信息通过Regist Message发送到服务器,服务器把注册信息添加到数据库,然后通过RegistResultMessage返回一个注册到的号码给客户端,如果过程出现错误就返回的注册到的号码为0。客户端收到注册结果后把注册到的结果显示给用户,或者提示注册不成功。由于在数据库添加记录后要返回注册到的号码,所以在数据库设计的时候hmnum没有用到自动递增,而是在注册的时候先得到hmnum的最大值,然后把最大值加1作为注册到的帐号,写到数据库,同时把这个号码返回给客户端。

4 聊天的设计与实现

聊天部分是系统的核心,涉及到严格的顺序控制和许多的细节。首先是在客户端的实现,在好友列表的列表项里保存了所有在系统的使用过程中要用到的信息,有好友的帐号、好友的昵称、好友的状态、好友的头像、好友的头像号和与该好友的聊天窗口。收到该好友的聊天消息时,如果与该好友的聊天窗口还没有初始化,就新建一个与该好友的聊天窗口存储在好友的列表里,然后把收到消息加入到聊天窗口里;如果与该好友的聊天窗口已经建立就直接把收到的消息加入到聊天窗口。如果聊天窗口还没有打开,就把好友的头像换成跳动的头像来提示用户已收到该好友的聊天信息。如果主窗口已经缩进到屏幕的上方或者最小化,则系统托盘会有消息框提示收到好友的消息。要打开与该好在的聊天窗口,只要在主窗口双击好友的列表项就行了。如果在好友头像跳动即有收到好友的时候打开窗口就会显示已收到的消息,打开聊天窗口后就可以与该好友进行聊天。

5 发送文件的设计与实现

发送文件的过来要由发送端、服务器和接收端共同协作来完成,要发送的文件都通过服务器来进行中转。文件发送的顺序控制为:①发送端发送文件信息,要求发送文件(发送文件的线程启动);服务器端向接收端发送文件信息,要求发送文件;接收端选择接收或拒绝,发送结束。②服务器端如果选择接收,为传输文件创建一个线程,创建serversocket等待发送端和接收端连接,把serversocket端口发送给接收端;接收端收到端口,连接到服务器的serversocket(接收文件的线程启动)。③服务器端与接收端连接上,把serversocket端口发送给发送端。④发送端收到端口,连接到服务器的serversocket;服务器端与发送端连接上后,向发送端发送一个信息,表示已经可以开始发送文件的数据。⑤发送端收到信息后发送数据,开始循环发送文件数据,同时更新进度条和传输速度;服务器端接收发送端的数据,再发送到接收端;接收端接收文件数据,同时更新进度条和传输速度。⑥发送端传输完成,线程结束;服务器端传输完成,线程结束;接收端传输完成,线程结束。

[1]Bruce Eckel.Thinking in Java [M].Third Edition.北京:机械工业出版社,2004:315-370.

猜你喜欢

服务器端接收端线程
基于扰动观察法的光通信接收端优化策略
基于C#线程实验探究
顶管接收端脱壳及混凝土浇筑关键技术
基于多接收线圈的无线电能传输系统优化研究
Linux环境下基于Socket的数据传输软件设计
基于国产化环境的线程池模型研究与实现
酸槽内钢带位置测量传感器
浅析异步通信层的架构在ASP.NET 程序中的应用
浅谈linux多线程协作
基于Qt的安全即时通讯软件服务器端设计