基于JAVA中国象棋网络对弈软件毕业设计Word下载.docx
- 文档编号:21072091
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:57
- 大小:1.42MB
基于JAVA中国象棋网络对弈软件毕业设计Word下载.docx
《基于JAVA中国象棋网络对弈软件毕业设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于JAVA中国象棋网络对弈软件毕业设计Word下载.docx(57页珍藏版)》请在冰豆网上搜索。
数据库MySQL5.1
MySQLWorkbench5.2CE
1.2.2运行环境
Window7、Windowsxp等各类支持Java的操作系统。
2.Java和网络套接字技术
2.1Java简介
Java,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。
Java平台由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface、简称API)构成。
Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。
现在Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以只编译一次,就可以在各种系统中运行。
Java应用编程接口已经从1.1x版发展到1.2版。
目前常用的Java平台基于Java1.5,最近版本为Java1.7。
Java分为三个体系JavaSE(Java2PlatformStandardEdition,java平台标准版),JavaEE(Java2Platform,EnterpriseEdition,java平台企业版),JavaME(Java2PlatformMicroEdition,java平台微型版)。
本软件采用的是JavaSE。
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。
2.2Java图形技术
Java是面向对象的语言,运用Java开发图形界面相当便捷,Java提供了JFrame、JPanel、JButton、JLabel等窗口和组件。
Java采用了触发更新的方式更新界面,如果我们需要在界面上添加上自己的图形则只需要重写paint方法。
AWT(AbstractWindowingToolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。
AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件(components)。
抽象窗口工具包(AbstractWindowingToolkit)(AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包。
AWT是Java基础类(JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。
AWT提供了JavaApplet和JavaApplication中可用的用户图形界面GUI中的基本组件(components)。
由于Java是一种独立于平台的程序设计语言,但GUI却往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观(不一定完全一致)。
Java1.0的AWT(旧AWT)和Java1.1以后的AWT(新AWT)有着很大的区别,新的AWT克服了旧AWT的很多缺点,在设计上有较大改进,使用也更方便,这里主要介绍新的AWT,但在Java1.1及以后版本中旧的AWT的程序也可运行。
抽象窗口工具包AWT(AbstractWindowToolkit)是API为Java程序提供的建立图形用户界面GUI(GraphicsUserInterface)工具集,AWT可用于Java的applet和applications中。
它支持图形用户界面编程的功能包括:
用户界面组件;
事件处理模型;
图形和图像工具,包括形状、颜色和字体类;
布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;
数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。
Java释出的时候,AWT作为Java最弱的组件受到不小的批评。
最根本的缺点是AWT在原生的用户界面之上仅提供了一个非常薄的抽象层。
例如,生成一个AWT的复选框会导致AWT直接调用下层原生例程来生成一个复选框。
不幸的是,一个Windows平台上的复选框同MacOS平台或者各种UNIX风格平台上的复选框并不是那么相同。
这种糟糕的设计选择使得那些拥护Java“一次编写,到处运行(writeonce,runanywhere)”信条的程序员们过得并不舒畅,因为AWT并不能保证他们的应用在各种平台上表现得有多相似。
一个AWT应用可能在Windows上表现很好可是到了Macintosh上几乎不能使用,或者正好相反。
在90年代,程序员中流传着一个笑话:
Java的真正信条是“一次编写,到处测试(writeonce,testeverywhere)”。
导致这种糟糕局面的一个可能原因据说是AWT从概念产生到完成实现只用了一个月。
在第二版的Java开发包中,AWT的器件很大程度上被Swing工具包替代。
Swing通过自己绘制器件而避免了AWT的种种弊端:
Swing调用本地图形子系统中的底层例程,而不是依赖操作系统的高层用户界面模块。
Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event。
2.3Java事件响应技术
Java事件响应技术采用监听事件产生组件的事件产生来响应事件。
2.3.1鼠标事件响应
鼠标操作可以产生ActionEvent,MouseEvent,MouseWheelEvent事件,我们可以创建一个继承ActionListener接口的MyActionListener类用来监听鼠标产生的ActionEvent事件,在MyActionListener中重写actionPerformed方法,在此方法中可以加入当鼠标产生ActionEvent事件时的响应操作,我们通过创建另一个继承MouseListener接口的MyMouseListener类用来监听鼠标产生的MouseEvent,在MyMouseListener中重写mouseClicked方法,在此方法中可以加入鼠标产生MouseEvent事件时的响应操作。
2.3.2键盘事件响应
键盘操作可以产生KeyEvent事件,我们可以创建一个继承KeyListener接口的MyKeyListener类用来监听键盘产生的KeyEvent事件,在MyKeyListener中重写keyPressed方法,在此方法中可以加入键盘产生KeyEvent事件时的相应操作。
2.4网络网络通信技术
2.4.1TCP
TCP:
TransmissionControlProtocol传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transportlayer)通信协议,由IETF的RFC793说明(specified)。
在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
TCP是TCP/IP体系中非常复杂的一个协议,TCP的最主要的特点有:
1)TCP是面向连接的运输层协议。
2)每一条TCP连接只能有两个端点,每一条连接只能是点对点的。
3)TCP提供可靠交付的服务。
4)TCP提供全双工通信。
5)面向字节流。
2.4.2UDP
UDP是UserDatagramProtocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
它是IETFRFC768是UDP的正式规范。
用户数据报协议UDP只在IP的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及差错检测的功能。
UDP的主要特点是:
1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
3)UDP是面向报文的。
2.4.3Socket
socket的英文原义是“孔”或“插座”。
作为4BDSUNIX的进程通信机制,取后一种意思。
通常也称作"
套接字"
,用于描述IP地址和端口,是一个通信链的句柄。
所谓socket通常也称作"
,应用程序通常通过"
向网络发出请求或者应答网络请求。
如何使用Socket开发一个Server-Client模型的程序。
服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;
在完成会话后,关闭连接。
客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;
会话完成后,关闭Socket。
客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix操作系统里面的。
如果了解Unix系统的输入和输出的话,就很容易了解Socket了。
网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
2.4.4Java实现
Java提供了灵活方便的类实现Socket通信,包中拥有丰富的API,与TCP和UDP相关的有。
InetAddress:
用来封装IP地址的类。
ServerSocket:
用来产生服务器套接字实例的类。
Socket;
用来产生客户端套接字实例的类。
DatagramPacket:
用来产生数据包实例的类。
DatagramSocket:
用来实现UDP套接字的类。
另外java.io提供了InputStream和OutputStream虚类实现对字节流操作的封装。
3.中国象棋网络版架构设计与通信设计
3.1中国象棋网络版架构分析与设计
本软件要实现多用户在线弈棋,所以采用C/S架构,服务器端和客户端分别完成各自的功能。
服务器需要实现登录注册和弈棋通信两大功能模块,提供登录、注册、数据转发、在线用户数据维护、建立弈棋等服务功能。
将服务器分为两大模块是因为这两个模块可以完全分离,互不影响,独立运行,保证了登录模块出现异常不会影响到已在线用户的用户体验,提高了服务器的可用性。
客户端需要实现登录、注册、弈棋、用户列表、实时交流和棋局状态记录显示六大功能,需要设计登录、注册、弈棋、用户列表维护、实时交流、棋局状态记录显示、登录注册和弈棋通信八大模块。
3.2中国象棋网络版数据通信设计与实现
3.2.1通信协议选择
经架构分析将登录注册模块与弈棋的通信模块分开设计,又根据两个模块对网络通信可靠性和即时性要求不同,所以设计登录模块的网络层通信协议为UDP协议,弈棋通信模块的网络层通信协议为TCP协议。
效率分析:
UDP协议是无连接、不需要包检测和重传机制的,优点是网络通信效率高。
而TCP协议是面向连接的,需经过三次握手,拥有包检测和重传机制,保证了数据完整和正确性,优点是可靠。
登录注册模块需要提供一个高效但不一定可靠的响应,即该模块允许在通信过程中丢包。
每一次登录注册请求与响应只产生一个往返的数据报,UDP协议的无连接特性保证的数据通信的高效性。
面对恶意登录请求,如果选择TCP协议,大量的建立连接会占用过多的系统资源,产生很高的服务器负载,影响服务质量,降低客户的用户体验。
所以登录注册模块选择UDP协议可以带来一个高效益的服务响应。
弈棋通信模块需要给客户提供一个高可靠性和稳定性的连接,即不允许在通信过程中发生数据丢失而不处理的事件。
如果采用UDP协议需要在服务器应用中添加包检测与重传功能,增加了服务器负载。
且弈棋通信是一个较长的数据通信过程,使用UDP协议并不能很大提供数据通信效率,而TCP协议很好的提供了包检测和重传机制,保证了数据通信的高可靠性和稳定性。
服务器与客户端的典型数据通信与处理流程图如图3.1。
图3.1服务器与客户端网络通信流程图
3.2.2数据类型分析
要实现在线对弈,就需要有数据的交互,根据预设的功能需要最基础的就有登录、登出、棋子移动、聊天等数据的通信,还有其它一些如:
棋子的选择、用户列表更新、棋谱的传输等数据通信。
如果不加分类很容易产生混乱,所以根据数据所属的不同模块将这些数据进行分类。
数据传输方式以“UTF-8”字符编码明文传输,其消息字符串message中的第一个字符为系统消息,将第一个字符char的2个字节16bit分为4级消息
char&
0xf00char&
0xf
符号位第二级消息第四级消息
将此字符进行位移运算分离各级消息
第一级消息第三级消息
char&
0xf000char&
0xf0
关于棋盘的消息格式为:
4字节字符串,前2个字节表示系统消息,后2个字节表示用户操作消息:
闪烁消息:
X坐标y坐标
移动消息:
源x坐标源y坐标目的x坐标目的y坐标
用户列表更新消息为
+"
;
"
+
用户积分用户状态8-16个
为分隔符,分割
每个用户的信息多个
服务器发送给旁观者的棋盘状态是一个由24个字符组成的字符串:
第一个字符为系统消息
其余23个字符分别携带棋盘上的90个位置的棋子状态
其中空子位为0
1-7代表黑方棋子:
1车8-14代表红方棋子:
8车
2马9马
3象10相
4士11仕
5将12帅
6炮13炮
7兵14卒
3.2.3数据格式设计
根据3.2.2节中对数据格式的分析,设计出系统消息格式(详见表3.1)。
给不同的功能模块设计不同的系统命令(如表3.1中Chessboard中第一级命令格式为CHESSBOARDPANE0x1000/0001,其中0x1000表示此命令的十六进制数值,0001表示为此命令的部分二进制数值,CHESSBORADPANE表示此命令所实现的消息内容)。
表3.1系统消息格式设计
消息级别
消息类型
第一级
第二级
第三级
第四级
Chessboard
(棋盘模块系统消息)
CHESSBOARDPANE
0x1000/0001
CB_STRAT
0x100/0001
0000
CB_CHOICE
0x200/0010
CB_MOVE
0x300/0011
CB_RESULT
0x400/0100
CB_CHESSBOARD
0x500/0101
CB_LOOKONCHOICE
0x600/0110
CB_LOOKONMOVE
0x700/0111
Chat
(聊天模块系统消息)
CHATPANE
0x2000/0010
CP_SERVER
CP_NORMALTALK
Userlist
(用户列表模块系统消息)
USERLIST
0x3000/0011
U_ONLINE
U_LOGIN_ACEEPT
0x10
ULOGIN_REFUSE
0x20
U_OFFLNE
U_USER
U_USERUPDATA
U_USTATE
FREE
0x1
PLAYING
0x2
LOOKON
0x3
U_U_ADD
U_UDELETE
0x30
U_INVITE
U_INVITEACK
ACCEPTINVITE
REFSEINVITE
U_INVITED
U_LOOKON
U_NOLOOKON
Login&
Register
(登录模块系统命令)
LOGIN
L_ACCEPT
0x100
L_REFUSE
0x200
L_OUTTIME
0x300
3.2.4数据通信与处理伪码示例
数据通信格式为系统命令类型+消息数据。
此伪码示例简要的阐述了从登录到弈棋的数据通信与处理过程。
Begin:
第一步(登录):
Client(Login):
sendUDPpacket(登录消息+用户名+密码)
Server(LoginandRegisterThread):
接收Client的UDP包,解析数据内容为command+message
if(command==登录消息)
查询数据库中此用户名的密码
if(无此用户或密码不一致)
sendUDPpacket(登录失败)
else将用户名经MD5加密
sendUDPpacket(登录成功+MD5加密后的密匙)
elseif(command==注册消息)
if(数据库中有此用户)
sendUDPpacket(注册失败)
elsesendUDPpacket(注册成功)
else错误消息类型,丢弃
Client(Login)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 JAVA 中国象棋 网络 对弈 软件 毕业设计