kaiyun官方注册
您所在的位置: 首页> 嵌入式技术> 设计应用> 基于JAVA的仿QQ聊天系统的设计
基于JAVA的仿QQ聊天系统的设计
来源:微型机与应用2013年第24期
李 丹1,2, 张师毅1
(1. 温州医科大学附属眼视光医院 信息中心, 浙江 温州325027; 2. 厦门大学 软件学院,
摘要:以JAVA技术为核心,利用计算机局域网通信机制原理(例如TCP/IP协议、客户端/服务器端模式(C/S模式)、网络编程设计方法等)完成了一款适合局域网的仿QQ聊天系统。该系统主要由一个聊天服务器端程序和一个聊天客户端程序两块组成。前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来的信息,并能刷新用户列表;后者通过与服务器建立连接来进行客户端与客户端的信息交流。经测试,系统工作性能稳定,基本能达到聊天功能,并实现了部分附加功能。
Abstract:
Key words :

摘 要:以JAVA技术为核心,利用计算机局域网通信机制原理(例如TCP/IP协议、客户端/服务器端模式(C/S模式)、网络编程设计方法等)完成了一款适合局域网的仿QQ聊天系统。该系统主要由一个聊天服务器端程序和一个聊天客户端程序两块组成。前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来的信息,并能刷新用户列表;后者通过与服务器建立连接来进行客户端与客户端的信息交流。经测试,系统工作性能稳定,基本能达到聊天功能,并实现了部分附加功能。
关键词:即时通信通信协议; Socket; 多线程

随着计算机网络技术的发展,网络聊天工具已经成为人们日常交流的一种重要工具。它通信速度快,成本低,更重要的是方便人们信息的交流和资料的传递,所以开发一个易于操作并拥有友好界面的聊天工具可以较好地解决现实生活中通信费用高昂以及电话的单线程通信等问题[1]。QQ聊天系统是一款基于互联网的即时通信系统,它允许人们利用英特网技术实时地传送信息,并且能让用户选择性地接受或拒绝其他用户的信息。由于QQ有着出色的通信性能并且其用户普及度较高,因此本课题在模仿QQ的前提下,设计了一款具有聊天功能及其他附加功能的软件
1 系统分析
1.1 需求分析

聊天系统最重要的是服务器端和客户端两个方面。服务器端有两个主要任务:
(1)服务器端应当建立一个ServerSocket,并且不断进行监听,判断是否有客户端连接请求或断开连接。
(2)服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息给客户端。
客户端要完成的工作:
(1)与服务器端建立通信通道,向服务器端发送信息。
 (2)接收来自服务器的应答信息。
解决了上述的4个问题,也就完成了聊天系统的核心任务。
1.2 功能分析
1.2.1 服务器端功能

服务器管理员具有开启服务、关闭服务、配置服务器等功能。具体功能图如图1所示。

1.3 开发环境工具
基于JAVA语言的聊天系统主要运用JAVA语言与Socket类[2-3]结合进行开发。在开发过程中的主要环境包括:
(1)服务器端:Windows平台上首先有JAVA的jdk环境,一般采用jdk1.6,此外需要配置相应的path、classpath环境变量,并添加运行所需要的各种jar包,本系统开发的工具为Eclipse10.0。
(2)客户端:满足JAVA的jdk环境,主要采用jdk1.6。
(3)本次设计主要用到的类:java.net包中的Socket类、java.swing包中的类、java.awt包中的类以及java.util包中的集合类。
2 系统设计与实现
2.1 系统设计要点

聊天系统的设计主要是提供满足用户双方直接进行实时聊天的服务,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:
(1)实现思想
 在Internet上的聊天程序一般都是以服务器提供服务端连接响应,用户通过客户端程序登录到特定服务器,即可与登录在同一服务器上的用户进行交流,这是一个面向连接的通信过程。因此,要在TCP/IP环境下[4-5],实现服务器端和客户端两部分程序。
 (2)服务器端工作流程
 服务器端通过socket()系统创建一个ServerSocket来对客户端进行接收,并与指定的本地端口绑定bind(),就可以在端口进行监听listen()。Map用以存储用户姓名和对应的Socket。通过ChatRoomServerThread线程类来处理不同请求。如果有客户端连接请求,则给出一个相应的Socket,将客户端地址赋给这个Socket。登录成功的用户就可以在服务器上聊天。
 (3)客户端工作流程
客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据即可。
2.2 服务器端程序模块
 服务器与客户端间通过套接口Socket(TCP)连接。JAVA API为处理套接口的通信提供了一个相关类java.net.Socket,因此在JAVA中使用套接口相对简单,编写网络应用程序也相对比较容易。服务器端采用多线程来满足多用户的请求,并在服务器端通过创建一个ServerSocket对象来监听来自客户端的连接请求,默认端口自定5044,继而无限循环调用accept()方法接受客户程序的连接。
服务器端程序框图如图3所示,服务器开启主要步骤为:
(1)制造ServerSocket,对客户端进行接收
private void createServerSocket(){}
  (2)启动服务器,循环接收消息
public void startService() {
   while (true) {
   s = ss.accept();
   new ChatRoomServerThread(s).start();
   }
}
(3)线程类处理各种请求,在run()方法中依据不同类型请求进行各种操作
class ChatRoomServerThread extends Thread {
//主要方法
public ChatRoomServerThread(Socket s) {}
public void run(){
sendOnlineUserList(){}
sendMessageToClient(String mesg, String clientUserName) {}
sendMessageToAllClient(String mesg){}
//向所有好友发送消息
}
}
2.3 客户器端程序模块
客户端通过Socket与服务器建立连接。服务器与客户端通过构造器ObjectInputStream与ObjectOutputStream建立输入/输出流,然后双方通过该输入/输出流相互传递信息。一旦收到客户端的连接请求,服务器accept()方法立即返回一个新建的Socket对象。客户端继而向服务器发送消息,比如文件传输等,服务器收到来自客户的请求后,针对不同的消息处理不同的请求。客户端通过多线程类ReadMessageThread处理用户不同类型的请求。其程序框图如图4所示。

系统除了以上功能之外,还有一些附加功能模块,可以通过菜单栏进行选择,包括设置聊天窗口界面、单机游戏(扫雷)、便利记事本、文件上传等。
本次设计的仿QQ聊天软件系统运行稳定,用户通过客户端软件可实现聊天的基本功能,并添加了一些附加功能。但还存在着一些不足之处,比如用户管理不够全面,只能显示在线用户;另外系统未与数据库进行连接。因此系统在投入使用之前还需要不断地完善。
参考文献
[1] 庞怡,许洪光,姜媛.即时通讯工具现状及发展趋势分析[J]. 科技情报开发与经济,2006,16(16):169-170.
[2] 童铭.基于Socket的多用户通信框架及实现[J].四川大学学报(自然科学版),2006,43(3):702-705.
[3] 李峰. 利用流式Socket编程实现Window与Linux的通 信[J].微计算机信息,2006,22(3):112-113.
[4] 杨延双, 张建标, 王全明. TCP/IP协议分析及应用[M].北京:机械工业出版社,2007.
[5] 李素侠,段友祥.嵌入式TCP_IP协议的分析与研究[J].微计算机信息,2005(20):20-20.

此内容为AET网站原创,未经授权禁止转载。
Baidu
map