时间:2021/4/20
开发环境: jdk1.8
编译器:idea2018
编程语言:java
源码下载: github

前言:这个项目是笔者在学习完JavaSE基础后,为夯实基础所做的JavaSE实战开发。这一项目涉及的知识点有逻辑基础、面向对象、异常、集合框架、IO流、网络编程、多线程等。实现了包括登录、服务器监控、群聊私聊、发送图片、抖动、改变字体在内的功能。

项目结构

在这里插入图片描述

整个项目大体分为服务端和客户端,cilent中就是客户端的功能,而server中便是服务器。下面,详细介绍一下各个文件。

client

其中ChatFrame是使用Swing组件做的聊天主界面,其中设置聊天框的大小以及排版等。
CilentHandler是客户端处理器,用来处理不同请求,给与不同相应,如登陆处理、聊天信息处理等。
DouDong是用来实现窗口抖动的类。
FaceFrame是发送表情时的表情选择界面。
LoginFrame当然就是登陆界面了

constans

Constans这个文件是用来存放一些常数参数。

entity

ChatStatus是一个枚举类,用来标志不同的状态。
FontStyle 是将字体封装称一个实体类
ServerInfoBean是服务器参数
TransferInfo将聊天数据封装

util

FontSupport文件提供包装字体和解析字体的方法

IO

IOStream将读写消息的方法进行封装。

server

ChatServer为服务器
ServerFrame为服务器界面
SeverHandler为服务器处理器

ui

OnlineUserPanel是服务器中在线用户列表的版面
ServerInfoPanel是服务器参数

other

background中存放表情图片以及背景图
user.txt中存放账号密码,因为这里是一个在线聊天室,所以就暂时没用数据库。

大致思路

这个项目是基于Socket通信的在线网络聊天室,服务通过主线程接收请求,再分配给子线程处理。
登陆成功后,通过map保留在线用户和它对应的socke。在下线时将其剔除。
服务器和客户端都通过枚举类来识别状态处理不同消息。
改变字体是通过将每一个字都封装成一个对象,在发送过后又进行解析。
可能逻辑不是特别清楚,请大家见谅,欢迎一起讨论。

演示

运行chatServer,服务器只能开一个。
运行LoginFrame,客户端登录,可以多开。
在这里插入图片描述

服务器端可以看到登录,以及他们的聊天信息
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐