使用java Socket编写简单的联机井字棋游戏
Socket套接字简介
Socket套接字是在应用层和运输层之间的一个假象层(可以这莫理解),它向下包装了其他四层的操作,对程序员来说是透明的,也就是说,实际上C/S是在socket这一层上进行通讯的。
1.Socket建立连接
java中Socket把对象分为两种ServerSocket和Socket分别对应着服务端和客户端,我们不探究socket的具体原理有兴趣的可以看以下文章
链接: C++知识分享: Socket 编程详解,万字长文
接下来我们来建立简单的连接:
客户端代码:
//8080表明我们将服务器放在了8080端口
ServerSocket serverSocket=new ServerSocket(8080);
//这里阻塞的接收一个连接
Socket socket=serverSocket.accept();
服务端代码:
//向服务端发送连接请求返回一个socket对象
Socket socket = new Socket("localhost", 8080);
建立连接代码很简单,但是单纯建立一个连接又没有什么,我们建立连接就是为了交互,所以我们需要一点逻辑代码:最简单的输入输出
//输入流从另一端的输入读入
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//输出流输出到另一端
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
//读入使用bufferedReader.readline();
//输出则使用printWriter.println();
//这其中还有很多细节,譬如bufferedReader.readline();是阻塞函数等等,这是需要根据实现场景改变的不进行讨论
此时我们已经可以简单的使用Socket了如果你尝试了通讯,那你会发现只能输入一次,然后连接就断开了,这是因为如果socket连接不处于活跃状态,那么连接就会断开,所以我们需要让这个连接一直保持活跃,“心跳包”什么的不需要,我们需要添加一个while循环。
2.主要逻辑
//Server中的主要逻辑
while (true) {
//为线程添加锁
synchronized (lock) {
if(win.getWin()) {
printWriter.println("win");
printWriter.println("游戏结束");
printWriter.println(toString.ArrayToString(map));

3349

被折叠的 条评论
为什么被折叠?



