java 在线聊天_基于Java的在线聊天室

本文介绍了一个基于Java Socket编程的在线聊天室项目,具有群聊、私聊和文件传输功能。项目结构清晰,包含客户端和服务端,推荐在Java 8环境下运行。服务器通过ChatServer和FileServer分别处理聊天和文件传输,客户端通过GUI界面与服务器交互。用户上线、下线及聊天信息都会被广播给所有在线用户。
摘要由CSDN通过智能技术生成

一、项目功能

本项目使用java socket编程,实现一个具有GUI界面的在线聊天室:

4b24a6c93fb2070f1c7176963b0b0893.png

该项目具有以下几项功能:构建一个服务器 S 和若干个客户机 C;

每一台客户机 C 都可以与服务器 S 和其他客户机连接;

每一台客户机 C 都可以通过 S 获得其他客户机发来的信息,并显示哪一台客户机在线,使用的是什么 IP 等;

群聊功能:每一台客户机 C 可以通过服务器 S 的群聊天室与其他客户机通信,即既可接收信息也可发送信息;

私聊功能:客户机 C 通过选择在线的用户并进行连接,进行私聊;

支持文件传输

二、项目文件结构

项目目录结构如下:youliao

│  1-双击编译.bat

│  2-双击运行服务端.bat

│  3-双击运行客户端.bat

│  beautyeye_lnf.jar           // 图形界面用到的库

│  ClientMain.java             // 客户端启动文件

│  ServerMain.java             // 服务端启动文件

├─client

│      chat.png

│      ChatClient.java

│      Client.java

│      ClientView.java

│      FileClient.java

└─server

ChatServer.java

FileServer.java

客户端client和服务端server分离,其中beautyeye_lnf.jar是GUI用到的第三方库, 客户端包括聊天客户端和文件客户端, 服务端也包括这两种, 另外客户端还实现了GUI界面ClientView. 项目中附带了三个bat脚本, 可用于快速编译运行, 也可自己使用IDE创建项目.

三、项目运行

注意, 该项目不兼容最新版版的Java10, 使用Java10运行会出现客户端界面显示不完整的问题, 在Java8 (jdk1.8)下能完美运行, 推荐使用Java8.

这里主要介绍两种运行方法:

方法一:

1. 不需要新建项目, 只需将压缩包解压, 先 双击编译.bat

2. 编译成功后, 双击运行服务端.bat,这是会启动服务端, 服务默认会监听8080端口

3. 双击运行客户端.bat,会打开聊天窗口, 输入服务器ip和端口进行连接. 客户端可运行多个, 模拟多人登录, 并可进行群聊.

方法二:

在Java IDE中新建项目,  将 beautyeye_lnf.jar, client文件夹, server文件夹添加到 BuildPath 中, 运行ServerMain 和 ClientMain, 注意运行ServerMain的时候需要输入命令行参数, 或者修改main函数, 手动设置port.

四、项目实现

1. 服务器设计思路

一共有两台服务器,一台聊天服务器 ChatServer 和一台文件服务器 FileServer。

ChatServer

ChatServer 主要负责转发聊天内容和用户信息给所有用户,用于支持跟进用户信息功能和群聊功能。用户 A 连接服务器的时候,首先向服务器发送一个用户名,服务器收到之后搭建socket连接,然后记录用户A的IP和端口号,接着服务器将所有当前在线的用户的名字、IP 和端口信息发送给这位刚上线的用户A,最后服务器向其他在线的用户群发用户 A 的名字、IP 和端口号以提示新用户上线,这里IP和端口号的作用是方便客户端进行私聊。用户A要下线的时候,发送一个命令"[OFFLINE]"给服务器提示下线,服务器清除相关资源并关闭连接,同时将用户A要下线的消息转发给其他在线用户。在使用群聊功能时,某个客户端发起群聊消息给服务器,服务器会把该消息转发给其他在线用户,从而实现群聊的功能。私聊时,客户端向服务器发送私聊消息,由服务器转发给指定的接收用户。

下面是服务器与客户端的交互的过程以及发送数据的格式:

2ec3fcb0cf9c45567a712fc1b8f1749f.png

FileServer

FileServer 主要为整个应用提供传输文件服务器,包括群发文件和私发文件。客户端想要发送文件的时候,将文件发送给服务器并附加相关信息(群发/私发), 服务器根据客户端的需求将文件转发给其他在线⽤户。下面是文件服务器和客户端的交互过程:

8d489ae572fc6e7dad9da85d348f264a.png

963ceb9b060a8610f6219ff573754295.png

2. 客户端设计思路

群聊和私聊

与服务器交互,直接按照前面所述的格式向服务器发送数据,并且接受来自服务器的数据即可。发送数据时,将相关的数据按照相应的格式封装好再进行发送, 接收数据时,将来自服务器的数据按照"[#]"进行切割,提取相关字段的数据之后呈递给GUI层使用。

文件传输

客户端不管是私聊还是群聊的文件都直接发送给服务器,再由服务器完成相应的转发。通信过程在前面已经有所阐述,这里不再重复。

与 GUI 层的交互

客户端和 GUI 分别是两个线程,GUI 负责用户界面的渲染和相关操作的响应,客户端则是负责跟服务器进行数据交互或者私聊的时候跟其他客户端进行交互,并且将交互的数据呈递给 GUI 使用。下面简单描述 GUI 与服务器的交互过程。

3191290a8430f333c576f426b998e01b.png

四、其他说明

评论有时不能及时看到, 该项目内容较多,有疑问的直接联系我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值