APP下载

用JAVA实现的基于TCP协议的网络聊天室

2020-07-04王海燕郭元颖

科学与财富 2020年14期
关键词:多线程

王海燕 郭元颖

摘 要:Java是Sun公司推出的新一代面向对象的程序设计语言,由于它与生俱来的一些特性,例如: 面向对象、平台无关、 多线程、 高度安全性等等,使得它特别适合于网络应用程序的开发[1]。本文通过Java语言中的Socket编程、JDBC、多线程以及图形界面等相关技术来设计、实现了一个基于TCP协议的网络聊天室系统。

关键词:Java;Socket编程;多线程;网络聊天室

一、聊天室所涉及到的理论知识

在开发聊天室系统时,考虑到界面以及功能的实现,涉及到的理论知识点如下:

(一)图形界面

Swing是Java为图形界面应用开发提供的一组工具包,是Java基础类的一部分。Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口、标签、按钮、文本框等。Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯Java实现,能够更好的兼容跨平台运行[2]。

(二)Socket编程

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket实际上是计算机提供的一个通信端口,通常用来实现客户端和服务器端的连接。当客户端程序连接到服务器端程序时,也就建立了一个双向通信连接,客户端就可以访问服务器上的资源,同时得到相应的服务。例如网络上常用的telnet、ftp等协议都是基于Socket的服务器程序。

(三)多线程

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。Java支持多线程,因此用Java编写的应用程序可以同时执行多个任务。考虑到服务器端可以同时给连接的多个客户端提供服务,需要通过多线程来实现。

(四)JDBC

JDBC,Java Database Connective,是连接java程序和数据库之间的桥梁。它实际上是Java语言访问数据库的一种规范,是一組标准的Java语言中的接口和类。使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。考虑到网络聊天室中聊天信息的持久保存,可通过JDBC来实现。

二、聊天室的设计

本文的聊天室系统采用C/S结构,C表示客户端,S表示服务器端。C/S结构是目前较为流行的网络系统开发结构,它可以充分利用两端硬件环境的优势,降低系统的通讯开销。通信时,先由客户端向服务器端发出连接请求,服务器端始终运行来提供服务。服务器启动后,就会监听网络端口,一旦监听到有客户端请求,就会启动一个服务线程来响应该客户端,为该客户端提供服务,同时继续监听服务器端口,再来一个客户端还能继续提供服务,以此类推,这样服务器端可以同时为多个客户端提供服务。

系统在设计时分为界面设计和功能设计。界面采用图形界面,主要用到一些Swing组件并需要设计界面布局。客户端包括登录界面、主窗口界面。服务器端只有一个窗口界面。在设计功能时,客户端具有的功能包括:发送聊天信息,显示聊天记录,上传、下载文件、实时显示聊天室在线人员列表、退出聊天室等。服务器端具有的功能包括:启动服务器、接受客户端的连接、启动线程为客户端提供服务、转发信息(客户端发送的聊天信息实际上是先发给服务器,然后由服务器再转发给其他的客户端)、统计连接到服务器的客户端的个数、各自的信息,以及始终提供服务、继续接收客户端的连接、关闭服务等。本聊天室的功能模块如图1所示。

三、聊天室的实现

(一)服务器端的实现

在C/S结构的网络程序中,服务器作为提供服务的进程,要始终提供服务,当它启动后就等待客户端的连接请求。通常一个服务器可以同时为多个客户端提供服务,这可以通过多线程机制来实现。这种多线程的并行通信方式,可以极大提高服务器的资源利用效率,让客户端有更好的体验。另外,客户端与服务器端的通信通过Socket来实现,Socket是网络上运行的两个程序间双向通信的一端,它既可以接收请求,也可以发送请求,利用它可以很方便地进行网络数据传输。除此之外,服务器还需要存储所有连接到它的客户端,可通过集合类来存储。这样便于统计连接的客户端的数量,同时实现消息的转发。在转发消息时,同时将消息存储到数据库中。

(二)客户端的实现

在C/S结构的网络程序中,客户器作为请求的发出者,当向服务器端发出连接请求时,服务器给予响应。建立连接之后,客户端就可以向服务器发送聊天消息,同时接收服务器转发的消息。由于客户端需要一直接收服务器转发的消息,需要启动一个线程来实现。客户端在上传、下载文件时,传输内容需要同发送、接收聊天消息区分开,可通过加个标识区分。在实时显示在线人员列表时,同样通过一个线程来实现。

四、结语

本聊天室图形界面友好,具备聊天室基本的功能,虽然与QQ等聊天软件尚有很大差距,但作为《Java高级编程应用》这门课的教学案例还是很不错的。该聊天室系统综合运用了图形界面、多线程、网络编程、JDBC等相关知识,是综合程度较高的一个案例。通过该案例的开发,让学生充分体会到所学知识的运用,进一步提高学生学习的兴趣,教学效果良好。后续还可以继续扩展该聊天室的功能,例如:实现私聊、添加头像、添加表情等。

参考文献:

[1]王素苹.一种基于Java Swing的网络聊天室的设计与实现.现代计算机:2012.07.

[2] https://blog.csdn.net/xietansheng/article/details/72814531.

作者简介:

王海燕(1982—),硕士,山东信息职业技术学院。

猜你喜欢

多线程
Java并发工具包对并发编程的优化
基于多线程文件传输关键技术研究与实现
网页爬虫技术的关键技术研究探索
一种基于多线程的高速磁盘镜像算法
iOS并发程序设计中几种方法的特点及使用技巧研究
电站锅炉煤粉参数远程监控系统的软件设计与实现