简单的Java聊天室
项目背景
在学校做智能小车的课程设计中,使用C语言进行局域网下的进程通信时接触到了网络套接字编程,当时是一个单线程的客户端和服务器短的交互,给小车发送数据,控制小车的行驶。由于是单线程版的客户端和服务端通信,客户端和服务器端只能进行一种僵硬的通信:一方发送数据,一方接受数据。于是产生了用Java写一个简单的聊天室,实现简单的通信。
项目的描述
该项目的本质是Socket套接字编程,在学习Java的Socket相关的知识和方法过程中,利用Socket和ServerSocket实现了单线程版的Java聊天室,和在课程设计时使用C语言写的功能大体上相同,实现了简单的通信。单线程的通信容易产生以下问题
1、容易造成双方卡死的现象
2、发送一次数据后服务器与客户端均退出,不能持久通
3、不能同时进行数据的读取与数据的写入,只能顺序执行
4、服务器只能处理一个客户端的连接,当有一个客户端连接上服务器端时,服务器只能处理完该客户端后在处理其他客户端
为解决以上问题,在上面程序的基础上使用多线程技术,使得读数据和写数据分离,实现多线程下的网络套接字编程。
实现过程
项目使用的技术:
网络套接字编程、多线程、Java集合框架、输入流和输出流
项目的最终结构:
分为客户端和服务器端两部分,服务器端利用ServerSocket建立一个基站,等待客户端的连接,通过客户端发来的数据进行逻辑处理,实现局域网下的网络通信;客户端通过Socket 连接到服务器端和服务器进行交互。客户端和服务器端中使用多线程技术将读写线程分离,实现多客户端的连接
通信协议
username:注册名 客户端发送的消息以uesrname开始,表明进行客户端的注册
G:群聊信息 以G开头为进行群聊逻辑
P:发送者#发送的信息 以P开头为进行私聊逻辑,#号前为用户名,#后为发送的信息
实现功能:
在客户端连接到服务器端时,服务器为每个在线的用户发送用户上线信息,显示当前在线人数,进行群聊和私聊
结构设设计