引入 Socket 通信模型图示:
程序目标:
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:定义一个发送信息的规范
Step 2:定义一个用户管理类
1)保存用户信息
2)判断某个用户的登录状态
3)保存已登陆的用户信息
4)通过用户名找到其对应的socket及通过socket对象找到对应的用户名称
5)获取所有人的socket对象
Step 3:定义Server类,模拟服务器端
Step 4:定义Server类的子线程,处理每个客户端的输入输出
判断是否发起私聊:
判断是否发起群聊:
Step 5:定义Client类,模拟客户端
链接服务器:
判断登录结果:
Step 6:定义Client类的子线程,管理每个socket的输入输出
今日总结:今天的程序相比昨天要复杂了些,但其实就是以昨天的内容为基础,添加了接口,Map集合,加锁synchronized,以及javax.swing.JOptionPane的使用,基于客户端与服务器端的链接简单的做了一个聊天程序,从终端输入信息,以服务器端作为媒介,基本实现了客户端之间的对聊和群聊,不过还是有些小bug没有解决,当A用户向B用户发起私聊时,B用户可以收到由服务器端传递过来的信息,但 当B用户向A发送的信息时就无法成功,好像是数组越界的问题。。。
明天是最后一天Java学习,有点小方,,每一天的课程内容都有大量的不熟悉信息,充实的一天既要求理解所学的内容,更要求牢记学到的基本且重要的知识,然而我感觉现实确是:既不能完全理解上课内容,更别说牢记了。忧桑