区块链技术博客
www.b2bchain.cn

Java联网3D坦克大战(网络编程)的讲解

这篇文章主要介绍了Java联网3D坦克大战(网络编程)的讲解,通过具体代码讲解8441并且分析了Java联网3D坦克大战(网络编程)的讲解的详细步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了Java联网3D坦克大战(网络编程)的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/?p=8441。具体如下:

一、游戏效果

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

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

二、游戏涉及知识

服务器端运用了 IO、线程、网络、面向对象、异常 的内容,
客户端使用 unity3d引擎进行开发
Java联网3D坦克大战(网络编程)
Java联网3D坦克大战(网络编程)

三、服务器设计思路

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


有什么不懂的可以加我QQ私聊我

原创:北榛
QQ:1912075649

本文地址https://www.b2bchain.cn/?p=8441

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Java联网3D坦克大战(网络编程)的讲解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们