当前位置: 移动技术网 > IT编程>开发语言>Java > Java网络编程联机3D坦克大战

Java网络编程联机3D坦克大战

2020年08月17日  | 移动技术网IT编程  | 我要评论
一、游戏效果 Java网络编程联机3D坦克大战 二、游戏涉及知识服务器端运用了 IO、线程、网络、面向对象、异常 的内容,客户端使用 unity3d引擎进行开发三、服务器设计思路1.实例化Socket服务器,并指定端口号2.主线程循环监听多个客户端的连接,并将每个客户端连接保存在集合中3.启动接收数据子线程对象,每建立一个连接,则启动一个子线程来处理数据的广播四、服

一、游戏效果


Java网络编程联机3D坦克大战


在这里插入图片描述
在这里插入图片描述

二、游戏涉及知识

服务器端运用了 IO、线程、网络、面向对象、异常 的内容,
客户端使用 unity3d引擎进行开发
、
在这里插入图片描述

三、服务器设计思路

1.实例化Socket服务器,并指定端口号
2.主线程循环监听多个客户端的连接,并将每个客户端连接保存在集合中
3.启动接收数据子线程对象,每建立一个连接,则启动一个子线程来处理数据的广播

四、服务器代码

package test0813.tank.server; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; /**
 * 3D坦克大战服务器
 */ public class TankServer { //创建一个存储客户端连接socket的集合 static Vector<Socket> sockets = new Vector<>(); public static void main(String[] args) { TankServer tankServer = new TankServer(); tankServer.init(); } //初始化服务器 private void init() { try { //1.实例化Socket服务器,并指定端口号 ServerSocket server = new ServerSocket(7777); System.out.println("服务器已启动,等待客户端连接中..."); //2.主线程循环监听多个客户端的连接,并将每个客户端连接保存在集合中 while(true){ //接收客户端连接 Socket socket = server.accept(); //将此连接保存在集合中 sockets.add(socket); System.out.println("当前socket:" + socket); System.out.println("客户端连接数据:" + sockets.size()); //3.启动接收数据子线程对象,每建立一个连接,则启动一个子线程来处理数据的广播 new RecvTankServerThread(socket).start(); } } catch (IOException e) { e.printStackTrace(); } } //向所有客户端广播发送数据 public void broadCast(byte[] data,Socket self,int length){ //遍历sockets集合,并从每一个集合中获取输出流,将数据广播给其他客户端 for (Socket tempSocket : sockets) { if(tempSocket != self){ try { OutputStream os = tempSocket.getOutputStream(); os.write(data,0,length); } catch (IOException e) { e.printStackTrace(); } } } } //接收数据子线程 class RecvTankServerThread extends Thread { private Socket socket; public RecvTankServerThread(Socket socket){ this.socket = socket; } public void run(){ try { //从socket中获取流 InputStream is = socket.getInputStream(); //定义字节数组,作为装字节数据的容器 byte[] data = new byte[1024]; //循环读取 while(true){ //定义有效长度 int length = is.read(data); //收到数据,广播给其他客户端 broadCast(data,socket,length); } } catch (IOException e) { e.printStackTrace(); } } } } 

五、项目下载

https://download.csdn.net/download/qq_33591873/12710603

本文地址:https://blog.csdn.net/qq_33591873/article/details/107988879

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网