使用java Socket编写简单的联机井字棋游戏

使用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));

              
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值