聊天室设计开篇

目标说明,技术要点记录

Posted by LJJ on July 12, 2019

聊天室设计

前述:开启基础扩展之路的基石,使用java基础知识来开发一个聊天室系统,类似于QQ这样的通讯系统,简直是让人兴奋啊!一直以来,我的java学习都像是不断地模仿和继承,现在有好机会来正式地push一次自己的思维出去。就让我从这里开始把,向着一名优秀工程师的道路上冲刺吧,我会竭尽全力的!

问题重述

  • 用Java语言实现一个C/S聊天软件。类似于熟悉的QQ。
  • 从工作量上看,是一个小规模应用系统。但是该任务涵盖Java的基础语法,还涵盖了Java的高级应用技术。麻雀虽小,五脏俱全。

设计要求

基本功能:
  • 用户注册
  • 用户登陆
  • 一个聊天室
  • 多个客户同时聊天
  • 不能重复登陆
  • 每个人能够看到当前聊天室的情况,有多少人,都有哪些人在聊天。
  • 能够私聊
  • 多个聊天室
扩展功能:
  • 多个聊天室
  • 支持私聊
  • 换肤
  • 漂亮的界面
  • 踢人
  • 白板
  • 传送语音或视频

技术要点

基本点
  • 语言基础知识
  • 网络通信
  • GUI
  • 多线程
  • JDBC数据库访问
  • I/O
  • 一些基本类库(时间,字符串处理等等)
网络通信点
  • 在此聊天室应用程序中,创建一个套接字,用它建立与其他机器的连接。
  • 从套接字得到的结果是一个InputStream以及OutputStream,以便将连接作为一个IO流对象对待。 有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户用它初始一次连接。
  • 一旦客户申请建立一个套接字连接,ServerSocket就会返回(通过accept()方法)一个对应的服务器端套接字,以便进行直接通信。
  • 此时可以利用getInputStream()及getOutputStream()从每个套接字产生对应的InputStream和OutputStream对象。但这些数据流必须封装到缓冲区内。
  • 注意解决输入中文的问题。思考如何选择正确的IO方法。否则只能英文聊天了。
  • 注意服务器端需要采用并发模式来提高吞吐率,采用什么样的并发模式
聊天协议点
  • 为了编写客户-服务器应用程序,必须建立两个程序:客户和服务器。在这两个程序中,必须定义这两个应用程序将如何通信。
  • 客户和服务器进行通信所必须遵守的规则就是协议。协议定义客户-服务器程序如何交互。
  • 首先客户连接到服务器,而服务器则以一条指示聊天室目前在线用户名的信息响应该客户,并同时通知其他客户有新客户加入。
  • 然后,客户能够向服务器请求发送对话消息给聊天室内的任何人。服务器则可以响应他的请求。最后,客户会要求结束对话,而服务器中止该连接,并通知其他客户该客户已离开的信息。
流I/O操作点
  • 在Java中,能够读取一个字节序列的对象称作一个输入流;能够写一个字节序列的对象则称作一个输出流。
  • 因为面向字节的流不方便用来处理存储为Unicode(每个字符使用两个字节)的信息,而聊天程序不可避免会用到汉字传输,所以应该使用用来处理Unicode字符的类层次,这些类派生自抽象类Reader和Writer,它们用于读写双字节的Unicode字符,而不是单字节字符。
  • 类StringToKenizer允许应用程序将字符串分解为一个个标记(单词)
程序界面点
  • Swing
  • 事件处理
  • 客户端需不需要并发呢?为什么,思考如果不用并发,会有什么样的结果?为什么?

说在后面的话

这个聊天室做起来肯定没有那么容易,肯定会碰到各种各样的问题和细节。但是,这正是去提升自己的很好地机会。
因此,我希望在后续的过程中同时写聊天室设计系列文章时能够保持初心,一直去发掘自己的兴趣。
同时,也一定要保持专注度,切不可好高骛远。