本次面向对象编程课程设计,是制作一款五子棋联机对战游戏。在上学期做过一款五子棋单机版,其耦合度低,便将其拿来直接制作联机版本。
主要应用的技术:C/S架构 JAVA swing,JAVA socket,mysql+jdbc,多线程等,这里我着重把与网络传输的知识点进行细讲。
1.首先,什么是C/S架构?
服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
在C/S结构中,应用程序分为两部分:服务器部分和客户机部分。服务器部分是多个用户共享的信息与功能,执行后台服务,如控制共享数据库的操作等;客户机部分为用户所专有,负责执行前台功能,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。
2.C/S架构如何实现连接?
需要使用到两个类, 来实现Client和Server的连接
1.ServerSocket 搭建服务器
2.Socket 搭建客户端
两方使用socket(套接字 , 通信端点) 进行交流
serversocket用于创建服务器 . 创建完毕后, 会绑定一个端口号. 然后此服务器可以等待客户端连接 . 每连接一个客户端 , 服务器就会得到一个新的Socket对象, 用于跟客户端进行通信 .
Serversocket的创建:
基本的单连接在此就不做叙述,因为服务器需要同时连接多个客户端,因此这里需要将每个连接赋予给单独的线程进行操作,实现多个客户端同时交互数据。
(至于这里线程调用的request方法,在后面服务器端详细叙述)
Socket是两台计算机之间通信的端点 , 是网络驱动提供给应用程序编程的一种接口 一套标准, 一种机制 .
Socket的创建:
3.IO
服务器端在整个过程中的职责是处理客户端发送过来的数据以及将需要的数据发送给客户端。因此其不需要考虑游戏本身的逻辑,只需要传输数据即可。那么,数据究竟是如何传输的呢?这里就需要用到I/O流了。
什么是IO?
我们的电脑中,硬盘,内存等储存了我们平时使用电脑时所使用的数据,我们可以通过U盘,网络等获得他人的数据或将数据发送给他人。我们把这种数据的传输,称为一种数据的流动(即IO),通过流动的反向,分为输入(Input)和输出(Output),即流向内存时输入,流出内存是输出。
IO的分类:
通过数据的流向,分为输入流和输出流。
通过数据的类型,分为字节流和字符流
I/O流拥有许多子类,在本程序中我们通过使用ObjectOutputStream和ObjectInputStream来进行传输,你要是想问为什么,答案就是他可以直接传输Object类型的数据,即所有类型的数据,(简单粗暴,不是吗)。
使用方法:
首先,通过连接的套接字,获得其输入流和输出流,然后将其转换为OOS和OIS流,这样就可以发送和接收消息了!
可能你还有疑问,这里是获得流了,但没有实现真正的数据传输啊?那我们就拿代码的一部分做例子。
首先,客户端向服务器发送了字符串:log,然后发送了一个数据user,(注意:每次发送数据之后需要刷新管道,否则可能出问题,然后异常处理也不能少)