聊天室项目开发过程总结
项目介绍
该项目简单模仿QQ的聊天模块、项目功能模块包括用户注册、登陆、点击私聊和创建群聊
项目详情
为提升用户体验采用Druid数据源、使用Swing技术开发用户界面、对于客户端服务端的通信采用套接字连接、使用 HashMap实现对用户、用户私聊、群聊界面等的缓存
开发
准备工作:
1.数据源 : Druid 拽~ 阿里数据源 优点:1.降低资源消耗 2.提高响应速率 3.方便管理
1.加载数据源
2.获取连接 Connection
3.执行SQL
4.关闭资源
通过继承.有重复的封装在BasedDao
查询类SQL
select : executeQuery
PreparedStatement
ResultSet
更新类SQL
insert/update/delete
PreparedStatement
//页面 Swing
//页面
JPanel - 盘子 存放各类组件的基础容器
JLabel - 标签 图片也是标签
JTextField - 输入框
JButton - 按钮
JOptionPanel - 提示框(静态方法)
JScrollPane 滚动条
farm.size(400,400); 要删除 pork
//建立连接
使用套接字建立连接
ServerSocket 服务端
-accept(): 返回客户端的Socket
Socket 客户端
工具类抽取
加载资源文件使用 XXX.properties 文件 所以提取为工具类,读取资源文件
传递消息 使用 json字符串
- {“key”:“value”,…}
第三方工具 转换 json序列化概念 str -> Object :json的反序列化 Object -> str :json的序列化
这和以前的序列化功不一样 以前的 序列化是把 对象变为流的形式 Object…()方法之类的
//你想转换 首先得拥有一个 Google的Gson类
/** 封装所有公共操作 包括 json 格式* getResourceAsStream(fileName); 方法会读取当前工程下的资源文件** ctrl 加 shift 加 T 创建测试类* */public class CommUtil {private static final Gson GSON = new GsonBuilder().create();//通过properties的文件名 来获取properties资源文件public static Properties loadProperties(String fileName){Properties properties = new Properties();InputStream inputStream = CommUtil.class.getClassLoader().getResourceAsStream(fileName);try {properties.load(inputStream);} catch (IOException e) {System.err.println("资源文件加载失败");e.printStackTrace();return null;}return properties;}//首先要用Gson//序列化public static String object2String(Object object){return GSON.toJson(object);}public static Object string2Object(String string, Class objClz){return GSON.fromJson(string,objClz);}}
Message 类
//规定字段
type:1
content:userName
to:(私聊,群聊)
1、注册页面
//MD5加密
//注册用户: 在服务端实现,需要网络
//注册成功返回登陆界面, 连接断掉 --> 简化 现在放在客户端
注册成功提示注册成功,隐藏注册页面,返回登陆页面,
不成功,不隐藏当前页面.
2、登陆
服务端
1.保存新用户的上线信息 //最后左
2.将当前的所有用户 发送给新用户的好友列表
3.服务器给新用户的所有好友 发送上线提醒
客户端
1.与服务器建立连接, 将自己的用户名与Socket保存到服务端缓存
2.读取服务端的所有在线好友信息
3.既然要接收 , 那么新建一个后台线程不断读取服务端发送来的信息
点击登录
1.发送验证码 验证用户名 密码
-不成功 提示 继续当前页面
-成功 和服务器连接
? 但服务器怎么知道是你 -你的qq号
//现在还是存在一个问题 我可以重复登录 / 那么想要解决这个问题 或许可以从 服务器端的Map集合入手
-比如说名字已经在服务器端的Map集合里面了!!! 那我就可以不去服务端查找 直接告诉你 你还想一号登两次?
3、用户私聊
客户端:
私聊的发起者,主动发送发
1.点击要私聊的用户标签,弹出私聊界面
2.在弹出的页面,按照指定的协议向服务器发送私聊信息
-type : 2
-content : sender-msg
-to:目标客户端的用户名
//.不可能每次点击都new一下私聊界面 所以存在缓存
信息的接收方:
1.判断是私聊或者群聊 , 判断有没有界面 没有就new一个否则取出 弹出私聊界面 …
2.按照指定协议读取内容,发送信息
服务端:
1.收到客户端发来的私聊信息,取出目标端的Socket, 做信息转发
4、客户顿
群聊发起者
1.点击群名称标签,弹出群聊界面
2.将群聊内容发送到服务端
//type :4
//content : senderName - msg
//to : groupName
群聊接受者
服务端
1.收到群聊信息.解出群名
2.根据群名称,找到该群的所有用户 然后根据clients 找到该用户socket 然后发送信息
聊天室项目开发过程总结相关推荐
- web聊天室项目开发过程及重难点整理
目录 一.需求分析 二.业务背景 1.张三要发消息给李四 2.WebSocket实现消息推送流程 三.前后端接口和数据库系统设计 1.用户相关的接口 2.频道相关接口 3.数据库表的设计 四.功能交互 ...
- 仿微信的网络聊天室项目开发【完整源码讲解】
目录 总体开发思路 服务器端 服务器界面设计 建立TCP服务器端通信 建立服务器消息发送输出流 建立服务器消息接收输入流 建立服务器实时消息通信线程 设置服务器通信自由断开 客户端 客户端界面设计 建 ...
- Linux环境下——C语言聊天室项目
由于使用了多线程操作,客户端进入程序后请先随便注册一次用户后再进行使用. 本程序默认第一个用户即ID为1的用户为超级管理员. 由于线程阻塞,最后的踢人操作有阻塞,需要在被踢出在线链表后手动下线. 看了 ...
- 基于Linux下的即时通讯聊天室项目(全代码 有注释 可直接运行)
基于Linux下的即时通讯聊天室项目 一.序言 二.具体功能 三.系统客户要求 四.具体代码 1.服务器代码 2.客户端代码 一.序言 最近在写一个基于Linux下的聊天工具 它适合于局域网内所有人进 ...
- C语言聊天室项目说明书
网络聊天室项目说明 项目的目的和意义 该聊天室项目为利用linux下C语言网络编程相关知识,采用Server/Client,即服务器与客户端的基本框架实现.整个项目涉及了socket套接字,线程,嵌入 ...
- 聊天室项目(一)-展示
聊天室功能展示 聊天室要求: 1 . 项目简述 实现Linux环境下的简易聊天室,采用C/S模型,实现多客户端之间的稳定数据传输.可参考QQ.微信功能. 2. 项目需求 功能后的与代表选做,其中代表难 ...
- Springboot+Vue实现在线聊天室项目-修改头像、添加好友接口的实现
Springboot+Vue实现在线聊天室项目 该聊天室为大二上学期计算机网络大作业,并且是本人第一次使用vue实现前后端分离的项目,前端架构尚未熟悉可能会出现一些不妥之处,还请大佬们指出.(本文章写 ...
- Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 )
Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 ) 文章目录 Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 ) 1.J ...
- 【Java学习】聊天室项目(32)
聊天室项目需求: 1.用户名登录注册(判断有没有重复用户名,可设置ip和端口) 2.上下线提醒 3.在线列表 4.私聊 5.公聊 6.发送文字,文件. 7.聊天记录 保存 查询 删除. 8.下线 选做 ...
最新文章
- Spring--Context
- 带彩色字体的man pages(debian centos)
- poj2976 Dropping tests
- vim插件管理器minpac安装及使用
- 全国首个园区型绿色能源网一年“减碳”上万吨
- linux扫描硬盘故障命令
- java正则匹配性能,Java正则表达式的性能问题
- JS精粹知识点和我的解释
- 数据库第四次作业:数据备份与还原
- 机器学习算法——神经网络4(RBF神经网络)
- c语言编黑白棋的思路,黑白棋的问题。。555。。头发都掉了。。。
- 【Udacity项目】TMDb电影数据集探索分析
- 数据分析 - 数据可视化图表 适用场景(学习笔记)
- 神经网络之父Hinton介绍及其论文介绍
- 中国移动国际mCloud如何助力企业乘风破浪?
- 量化投资中的特征工程
- linux灯控软件,Ubuntu下通过脚本控制键盘背光灯
- 用CSS样式完成作业
- 外汇天眼:什么是外汇动量交易?新手指南
- 南昌大专计算机学校有哪些,江西南昌单招大专学校有哪些学校