# 嘿嘿游戏大厅
![整体架构](images/frame.jpg)
## 上图是服务器的整体架构图,服务器端分为五大部分:服务器的管理,用户信息管理和储存,游戏服务器的实现,大厅信息的更新与转发以及针对用户的线程管理。
# **游戏大厅可完成三人斗地主,双人五子棋对战,大厅内聊天等功能。**
## 一、 服务器的管理
### 首先进入服务器登陆界面,初始的账号和密码分别为admin和123456。文件存储在文件目录下的“log/administrator”,以“admin&123456”进行AES加密后进行base64加密储存。此文件必须保证存在且正确,若文件不存在或被修改,系统将不能登陆。
#### ① 菜单栏
四个选项:
>1. 开启服务器;
>2. 关闭服务器;
>3. 退出,以正常方式退出,在退出时会将内存中的用户数据放入磁盘中;
>4. 强制退出,有风险,可能会未正常保存用户数据,并且使客户端报错,用于紧急情况。
#### ② 在线人员查看
>开启服务器后,客户端可进行连接,连接成功后,会更新表中数据。断开连接功能可单选或多选恶意人员进行强制中断连接。
#### ③ 按钮功能
共有五个按钮:
>1. 刷新数据库:可让服务器强制进行一次数据刷新,将磁盘中的用户信息刷新。
>2. 显示/关闭游戏大厅:可打开大厅的监控界面
与客户端不同的是,服务器会广播人员的上线信息,并显示各大厅的在线人数。
>3. 刷新公告:
公告的信息在“log/notice.html”进行修改,每次修改保存后可刷新服务器中的公告,随后改变后来新登陆的人的公告栏信息。
>4. 查询账号信息:可查询某个账号的个人信息。
>5. 显示/关闭监视器:
系统运行的每个步骤都将记录到文档中,可查看系统正在运行中的日志系统,日志系统将保存到“log/activity”中。
>>其中监视器,用来显示系统进行中的操作,以及可以显示用户选择大厅信息,以及状态信息的更新,均会记录到文档中。磁盘中文件日志的储存,以单位日为时间轴进行。因为是实时更新的,可以防止系统因崩溃找不到日志文件,方便管理员进行对服务器的维护以及管理。
### 以上为服务器主框架的大致介绍。
### 服务器的功能还包括有定时刷新数据库,定时刷新重置次数,黑白名单(当客户端进行对客户端的非法操作时加入黑名单,白名单方便管理人员测试管理)等。
## 二、 用户信息管理和储存
###用户的信息储存在一颗B+树上,树的阶数视用户的估计数量而定,在测试中测试用户有十万个,所以采用的是万阶B+树,查找速度均在毫秒之内。B+树的插入与删除速度也均在毫秒之内。B+树的序列化采用将树和树上每一个叶节点通过ObjectOutputStream写入文本文档中。B+树上的每个叶节点有一个键值对存储着每一个Account信息。在找到用户对应的哈希值范围时,再对叶节点的键值对取出用户对象。在未来版本中,可以实现在服务器端修改用户的个人信息,volatile保证树是最新的树,将修改的数据马上刷新到主存。
在存储用户信息的过程中,对用户的密码、密保问题、密保答案均进行AES加密,加密密钥为“log/aes.key”,只有密钥正确才能在初始化时读取到用户的正确信息。用户的管理和存储包括:
>1. 注册:会修改树的信息,所以采用线程同步锁;每个人注册都会由系统分配一个对应的Id给用户,类似于QQ;
>2. 登陆:在登陆过程中因涉及敏感操作,所以在传输过程中,采用服务器发送公钥给客户端,加密后由服务器解密,防止用户信息的暴露在网络中;
>3. 注销:即设置在线状态为false,关闭连接与线程;
>4. 重置密码(将重置失败次数超过三次的用户禁掉,并每24小时自动刷新重置的次数);
>5. 修改昵称头像等。
### 在用户使用此客户端时,能捕捉用户的异常输入与操作,并对用户发出信息,如收到的信息格式不符合要求,或者收到非法信息等。登陆成功后,即可进入大厅进行操作。
## 三、 大厅信息的更新
### 大厅信息包括斗地主游戏大厅和五子棋游戏大厅的桌子状态以及更新、大厅聊天信息的更新、大厅公告栏的更新。
>1. 桌子状态的更新采用TCP协议与每个用户建立连接,收取用户的动作状态,如坐下、准备、站起来,存储在对应的容器Vector中,并通过函数对在相同大厅的人进行转发,其他大厅或未选择大厅的用户将无法收取动作信息。每次用户选择大厅点击确认后将会收到全部桌子状态进行刷新。
>>实现此功能的是Gobang_Tables.java和Landlord_Tables.java两个文件。当发送桌子的状态信息失败的时候(即网络阻塞或客户端异常断开时),程序会捕捉异常并及时把异常用户移出列表并关闭用户,防止二次异常。
>2. 大厅聊天信息采用UDP协议接收用户发来的聊天信息,并可以显示在服务器的游戏大厅上并对所有在线的用户在进行转发。
>3. 大厅公告栏通过发送html文本给客户端进行更新,html文件可在“log/notice.html”修改,不再重复叙述。
## 四、 针对用户的线程管理
### 因为对每一个建立了TCP连接的客户,都会分配一个线程进行处理,所以将进行对用户的线程管理。
>首先设置对用户操作时间超时,测试设置了20分钟,当用户超过这个时间没有任何动作时,服务器便会自动断开用户的连接,防止内存过度消耗。
同时,考虑到大用户量,便必然会引发并发问题,所以在服务器中,设置了阻塞队列,当服务器并发处理数量达到一定值,服务器便拒绝接收客户端的登陆,将优先处理前面的客户端。
最后,对用户操作有异常超过两次的,会加入服务器黑名单列表。
----
## **下面是服务器的一些截图**
![](images/1.jpg)
----
![](images/2.jpg)
----
![](images/3.jpg)
----
![](images/4.jpg)
----
![](images/5.jpg)
----
![](images/6.jpg)
----
## 由于本程序是我与另外两个人完成,我负责写服务器端,所以不再对客户端进行介绍。
## **下面是客户端的一些截图**
![](images/7.jpg)
----
![](images/8.jpg)
----
![](images/9.jpg)
----
![](images/10.jpg)
----
![](images/11.jpg)
----
![](images/12.jpg)
----
![](images/13.jpg)
----
没有合适的资源?快使用搜索试试~ 我知道了~
基于CS模式、使用原生Java Socket实现的一个支持多用户并发的游戏大厅。包括三人斗地主、双人五子棋、大厅内聊天、.zip
共2000个文件
png:1902个
java:49个
txt:23个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 141 浏览量
2024-05-12
17:16:53
上传
评论
收藏 10.29MB ZIP 举报
温馨提示
五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论
收起资源包目录
基于CS模式、使用原生Java Socket实现的一个支持多用户并发的游戏大厅。包括三人斗地主、双人五子棋、大厅内聊天、.zip (2000个子文件)
administrator 25B
嘿嘿游戏服务器.exe 440KB
嘿嘿游戏本地版(127).exe 429KB
notice.html 401B
icon.ico 66KB
icon.ico 4KB
GameLobby.java 20KB
Game_Lobby.java 19KB
Maingaming.java 16KB
Node.java 16KB
Server_Listener.java 14KB
Connections.java 12KB
Judge.java 11KB
ChessBoard.java 10KB
Server_Frame.java 10KB
Game_Server.java 6KB
forget.java 6KB
Coder.java 5KB
Login.java 5KB
Msg_Deliver.java 5KB
gameserver.java 4KB
gamelandlord.java 4KB
register.java 4KB
Login.java 4KB
Write_Log.java 4KB
Account_Manage.java 4KB
Acc_Info.java 4KB
Landlord_Tables.java 4KB
Connect.java 4KB
Gobang_Tables.java 4KB
heads.java 3KB
personinfo.java 3KB
AESEncrypt.java 3KB
c_connect.java 3KB
emoji.java 3KB
Account.java 3KB
BplusTree.java 3KB
Players.java 3KB
Players.java 3KB
emoji.java 3KB
playinfo.java 3KB
Game_Server.java 3KB
playinfo.java 3KB
Decode.java 2KB
StartChessJFrame.java 2KB
Chat.java 2KB
Encode.java 2KB
Decode.java 2KB
Poker.java 2KB
Poker.java 2KB
gamegobang.java 1KB
gameserver.java 1KB
randomString.java 1KB
Account.java 1KB
Point.java 728B
background.jpg 1.76MB
9.jpg 325KB
10.jpg 321KB
8.jpg 321KB
7.jpg 197KB
11.jpg 187KB
6.jpg 112KB
5.jpg 110KB
frame.jpg 68KB
13.jpg 57KB
12.jpg 53KB
4.jpg 43KB
2.jpg 40KB
1.jpg 31KB
3.jpg 15KB
aes.key 16B
white.list 10B
2018-10-17.log 8KB
2018-10-17.log 5KB
README.md 7KB
dizhu.png 50KB
dizhu.png 50KB
nongmin.png 44KB
nongmin.png 44KB
table.png 35KB
table.png 35KB
icon.png 31KB
icon.png 31KB
19.png 20KB
17.png 20KB
11.png 20KB
21.png 19KB
out1.png 19KB
15.png 19KB
20.png 19KB
16.png 19KB
pass.png 19KB
out2.png 19KB
pass1.png 19KB
out3.png 19KB
29.png 19KB
25.png 19KB
23.png 18KB
39.png 18KB
7.png 18KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
枫蜜柚子茶
- 粉丝: 6663
- 资源: 4870
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- openEuler-22.03-LTS-SP3-aarch64-dvd.zip.001
- 图像分割-基于Pytorch在VOC+Cityscapes上训练DeepLabv3+图像分割算法-附项目源码+详细流程教程
- 基于Java小区物业管理系统(源码+使用文档)
- 浙江省杭州市百度地图AOI
- 基于Java画图形学(源码+使用文档)
- JavaProject1.zip
- Python爬虫课程设计-爬取图书信息进行可视化分析(说明文档 + 源码)
- 基于Objective-C的地方性首饰专卖设计源码
- 数据库课程设计-jsp宾馆信息管理系统(开发文档 + 源码 + 数据库文件)
- allegro-free-viewer-17.2
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功