简单Java聊天室

简单的Java聊天室

项目背景

在学校做智能小车的课程设计中,使用C语言进行局域网下的进程通信时接触到了网络套接字编程,当时是一个单线程的客户端和服务器短的交互,给小车发送数据,控制小车的行驶。由于是单线程版的客户端和服务端通信,客户端和服务器端只能进行一种僵硬的通信:一方发送数据,一方接受数据。于是产生了用Java写一个简单的聊天室,实现简单的通信。

项目的描述

该项目的本质是Socket套接字编程,在学习Java的Socket相关的知识和方法过程中,利用Socket和ServerSocket实现了单线程版的Java聊天室,和在课程设计时使用C语言写的功能大体上相同,实现了简单的通信。单线程的通信容易产生以下问题

1、容易造成双方卡死的现象
2、发送一次数据后服务器与客户端均退出,不能持久通
3、不能同时进行数据的读取与数据的写入,只能顺序执行
4、服务器只能处理一个客户端的连接,当有一个客户端连接上服务器端时,服务器只能处理完该客户端后在处理其他客户端

为解决以上问题,在上面程序的基础上使用多线程技术,使得读数据和写数据分离,实现多线程下的网络套接字编程。

实现过程
项目使用的技术:

网络套接字编程、多线程、Java集合框架、输入流和输出流
项目的最终结构:
分为客户端和服务器端两部分,服务器端利用ServerSocket建立一个基站,等待客户端的连接,通过客户端发来的数据进行逻辑处理,实现局域网下的网络通信;客户端通过Socket 连接到服务器端和服务器进行交互。客户端和服务器端中使用多线程技术将读写线程分离,实现多客户端的连接

通信协议

username:注册名 客户端发送的消息以uesrname开始,表明进行客户端的注册
G:群聊信息 以G开头为进行群聊逻辑
P:发送者#发送的信息 以P开头为进行私聊逻辑,#号前为用户名,#后为发送的信息

实现功能:
在客户端连接到服务器端时,服务器为每个在线的用户发送用户上线信息,显示当前在线人数,进行群聊和私聊

结构设设计

服务器端
客户端

执行结果

服务器端

客户端

项目源码:

https://github.com/zimodest/char_room.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值