点击空白处退出提示
作品详情
基于作品要求,我分别开发了2个java程序,分别为服务端和客户端。
基于面向对象的编程思想,我在服务端部分将功能划分为TCP服务端、聊天群组管理模块、用户管理模块、数据库服务模块,并分别进行了类封装。
TCP服务端部分采用了基于java原生Socket和多线程技术实现,线程交由线程池托管。考虑到网络的不稳定性,我自行设计了一套基于数据包id和CRC32进行可靠性检测通讯规范,并完成了丢包重发的机制。此外,该服务端非常彻底地贯彻了面向对象编程的思想,从外部调用只需要寥寥几行,并且该TCP服务端完全使用事件控制,简单易用。
聊天群组模块不仅实现了基本的聊天室功能,还添加了聊天数据缓存和密码功能。当用户进入聊天室时,自动推送最近的消息给用户。
用户管理模块部分在用户账户安全性上做了改进,数据库中不会储存用户密码明文,每次用户登录时都会重新加密密码哈希值的密文。在加密部分,采用了RSA加密算法,并且采用了加盐哈希的机制加以混淆,保证密码的安全。
数据库部分使用mysql数据库,鉴于数据库部署于服务器本地,故使用长连接,并增加了掉线自动重连机制。
客户端部分的技术难度相对于服务端比较低,只需要按相同规范实现类封装的TCP客户端即可,这部分同样用事件驱动的。客户端比较麻烦的部分在于处理用户输入和基于命令行的操作响应。(面试题目硬性要求使用命令行输入输出)
这个项目总体的难点在于多线程数据操作的线程安全问题以及mysql操作部分(这是我第一次在java上使用mysql),多线程对内存数据的操作最后是使用了异步锁解决的,mysql操作部分查阅了不少资料,整个开发时长约3天。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论