“基于Java的聊天室”
——作业报告
目录
一、功能模块
1、登录
- 输入数字“1”,进入登录界面,通过用户输入的昵称和密码,在数据库中查询匹配的记录,若存在匹配则登录成功,否则登录失败,需要重新输入昵称和密码,直到输入成功。
(特殊情况:
提示用户输入昵称,并将用户输入存储在昵称变量中。
-
- 如果用户输入为空,则自动将“冰可乐”赋值给昵称。
- 如果用户输入为单个空格,则自动将“可可豆”赋值给昵称。
- 如果用户输入为两个连续空格,则“豆沙糕”赋值给昵称。
提示用户输入密码,并将用户输入存储在密码变量中。
-
- 如果用户输入为空,则“abc”赋值给密码。
- 如果用户输入为单个空格,则“123”赋值给密码。
- 如果用户输入为两个连续空格,则“1234”赋值给密码。
)
2、添加好友
首先查询数据库users表中的所有未添加且不是本身的用户,显示编号(编号从1开始以此递增),学号、昵称,根据用户输入的编号,找出对应的昵称,然后再查看一次好友表中的是否存在,双重保障,如果不存在,则可最后执行插入操作将好友关系添加到数据库中。
3、删除好友
首先查询数据库中的当前登录用户所有的好友信息(学号、昵称)与编号对应,
根据用户输入的编号,然后找到对应的学号,执行删除操作将好友关系从数据库中删除。
4、进入聊天室
可以实现许多用户进入聊天室私聊,通过解析消息内容,每次输入信息,传出当前客户端信息、目标客户端信息和私聊消息内容到客户端,服务器将相应信息传到目标客户端或者当前客户端,如果客户在线,则私聊消息会传到目标客户端,如果不在线,会提示当前客户端,目标客户不在线。
二、所用技术
1、JDBC(Java Database Connectivity)
使用JDBC与数据库进行交互。通过JDBC提供的API,可以连接数据库、执行SQL语句、获取结果集等操作。
2、Socket通信
Socket通信涉及两个主要组件:服务器端和客户端。服务器端监听着一个特定的网络端口,等待客户端发送连接请求。客户端则发起连接请求,并与服务器建立起连接后进行数据传输。
3、多线程编程
通过创建线程实现客户端的消息接收和发送功能。代码中使用了Thread类创建了一个接收消息的线程。
4. park() 和 unpark()
是用于线程同步和线程间通信的方法,它们是 java.util.concurrent.locks.LockSupport 类的静态方法。
5、Scanner
通过Scanner类获取用户在控制台输入的内容,并根据用户的选择执行相应的操作。
6、HashMap集合:使用HashMap来存储客户端的输出流。将客户端的名称作为键,输出流(PrintWriter)作为值,方便后续根据客户端名称查找其对应的输出流。
三、数据库表设计
chatroom数据库中一共有两个表:users表,friend表,login表。
下面是详细的表格信息:
friend表设计:
列名 | 数据类型 | 说明 |
id | INT(11) | 唯一标识好友关系的ID |
sNo1 | INT(11) | 学号1(学生ID) |
sNo2 | INT(11) | 学号2(学生ID) |
这个表格表示了一个名为friend的表格,其中包含了三列:id、sNo1和sNo2。
id 列被指定为主键(PRIMARY KEY),以确保每个好友关系在表中具有唯一的标识。
users表设计:
下面是表格列的详细信息:
列名 | 数据类型 | 说明 |
sNo | INT(11) | 学号(学生ID) |
nname | VARCHAR(60) | 昵称 |
sex | VARCHAR(12) | 性别 |
birth | DATE | 出生日期 |
age | INT(4) | 年龄 |
address | VARCHAR(300) | 地址 |
这个表格命名为 users,包含了六个列。
sNo 列用于存储学号(学生ID),数据类型为整数(integer),长度为11个字符。它被指定为主键,确保每个用户在表中具有唯一的学号。
login表设计:
下面是表格列的详细信息:
列名 | 数据类型 | 说明 |
nname | VARCHAR(60) | 昵称 |
password | VARCHAR(90) | 用户密码 |
这个表格命名为 login,包含了两个列。
nname 列用于存储用户名或昵称,数据类型为变长字符串(varchar),最大长度为60个字符。它被指定为主键,确保每个用户名在表中具有唯一的标识。
四、运行效果
1、启动服务器
2、登录
情况一:
输入1进入登录界面
接着,输入昵称和密码,如果输入错误,则提示重新输入,知道输入成功。
情况二:
选择1可不能输入,按换行符,可自动填充1
输入昵称可不输入:
按换行符,可自动填充冰可乐
按空格+换行符,可自动填充可可豆
按空格+空格+换行符,可自动填充豆沙糕
输入密码可不输入:
按换行符,可自动填充abc
按空格+换行符,可自动填充123
按空格+空格+换行符,可自动填充234
登录成功后给出提示,并输出功能菜单
3、添加好友
首先查询数据库中的所有为未添加且不是本身的用户,显示编号,学号、昵称,
根据用户输入的编号,找出对应的昵称,然后再查看一次好友表中的是否存在,双重保障,如果不存在,则可最后执行插入操作将好友关系添加到数据库中。
4、删除好友
首先查询数据库中的当前登录用户所有的好友信息(学号、昵称)与编号对应,
根据用户输入的编号,然后找到对应的学号,执行删除操作将好友关系从数据库中删除,输入错误会要求重新输入。
5、进入聊天室私聊
客户冰可乐给客户可可豆聊天:
客户kkd给客户冰可乐聊天:
客户豆沙糕给客户可可豆聊天:
客户可可豆退出(输入exit)与客户冰可乐的私聊,选择和客户豆沙糕私聊:
聊天内容:
服务器:
“1”,表示一个服务器接受套接字