简化版 QQ

GitHub: chat_room 项目代码连接

准备工作:

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...()方法之类的

//你想转换 首先得拥有一个 GoogleGson

```

/*

* 封装所有公共操作 包括 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集合里面了!!!! 那我就可以不去服务端查找 直接告诉你 你还想一号登两次?

 

 

用户私聊

 

 

客户端:

私聊的发起者,主动发送发

1.点击要私聊的用户标签,弹出私聊界面

2.在弹出的页面,按照指定的协议向服务器发送私聊信息

-type : 2

-content : sender-msg

-to:目标客户端的用户名

//.不可能每次点击都new一下私聊界面 所以存在缓存

信息的接收方:

1.判断是私聊或者群聊 , 判断有没有界面 没有就new一个否则取出 弹出私聊界面 ..

2.按照指定协议读取内容,发送信息

 

服务端:

1.收到客户端发来的私聊信息,取出目标端的Socket, 做信息转发

 

//群聊

 

 

客户顿

群聊发起者

1.点击群名称标签,弹出群聊界面

 

2.将群聊内容发送到服务端

//type :4

//content : senderName - msg

//to : groupName

 

 

群聊接受者

 

服务端

1.收到群聊信息.解出群名

2.根据群名称,找到该群的所有用户 然后根据clients 找到该用户socket 然后发送信息

 

 

总结:

缺点

1.界面样式太单一化   --- 

2.功能较少  --- 比如文件传输等

3.注册是在客户端 --因为模仿qq的话, 注册是在服务端, html,jsp ..邮箱/电话号码验证页面等

4.聊天记录,群聊记录等没有做持久化  退出即清空聊天记录等 

 

 

收获

1.良好的命名规范 == 自己对自己的友好性

2.写代码前先想好大致思路 ,以及你需要什么  --- 比如抽取工具类   代码未动, 注释先行

3.掌握几个Swing编程的 类用法

4.必须对自己友好, 多借鉴已有的工具及技术栈

 

//关于文件传输

有一个控件 有JFrameChoose 选择文件夹 返回一个file对象 然后成为文件代码

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值