搭建一个简单的客户端聊天程序

引入 Socket 通信模型图示:


QQ20190822-0.jpg

程序目标:
1)实现客户端之间的用户对聊
2)实现客户端之间的群聊

基本实现要求及步骤:
基本要求:
1.每个客户端有自己的名称
2.向某一个客户端发起私聊
3.发起群聊
基本实现步骤:
1.定义一个发送信息的规范:用接口实现
2.定义一个用户管理类,其中需要用到的方法包括:
1)保存用户信息;
2)判断某个用户的登录状态;
3)保存已登陆的用户信息;
4)通过用户名找到其对应的socket及通过socket对象找到对应的用户名称;
5)获取所有人的socket对象
3.定义Server类,模拟服务器端
4.定义Server类的子线程,处理每个客户端的输入输出
5.定义Client类,模拟客户端
6.定义Client类的子线程,管理每个socket的输入输出

基本步骤的具体实现:

Step 1:定义一个发送信息的规范


Jietu20190822-164212.jpg

Step 2:定义一个用户管理类
1)保存用户信息


Xnip2019-08-22_17-18-29.png

2)判断某个用户的登录状态


Xnip2019-08-22_17-18-43.png

3)保存已登陆的用户信息
Xnip2019-08-22_17-18-56.png

4)通过用户名找到其对应的socket及通过socket对象找到对应的用户名称
Xnip2019-08-22_17-19-21.png

5)获取所有人的socket对象


Xnip2019-08-22_17-19-39.png

Step 3:定义Server类,模拟服务器端


Jietu20190822-172334.jpg

Step 4:定义Server类的子线程,处理每个客户端的输入输出


Jietu20190822-172405.jpg

判断是否发起私聊:


Jietu20190822-172437.jpg

判断是否发起群聊:
Jietu20190822-172537.jpg

Step 5:定义Client类,模拟客户端


Jietu20190822-172843.jpg

链接服务器:


Jietu20190822-172858.jpg

判断登录结果:
Jietu20190822-172915.jpg

Step 6:定义Client类的子线程,管理每个socket的输入输出


Jietu20190822-172935.jpg

今日总结:今天的程序相比昨天要复杂了些,但其实就是以昨天的内容为基础,添加了接口,Map集合,加锁synchronized,以及javax.swing.JOptionPane的使用,基于客户端与服务器端的链接简单的做了一个聊天程序,从终端输入信息,以服务器端作为媒介,基本实现了客户端之间的对聊和群聊,不过还是有些小bug没有解决,当A用户向B用户发起私聊时,B用户可以收到由服务器端传递过来的信息,但 当B用户向A发送的信息时就无法成功,好像是数组越界的问题。。。
明天是最后一天Java学习,有点小方,,每一天的课程内容都有大量的不熟悉信息,充实的一天既要求理解所学的内容,更要求牢记学到的基本且重要的知识,然而我感觉现实确是:既不能完全理解上课内容,更别说牢记了。忧桑

你可能感兴趣的:(搭建一个简单的客户端聊天程序)