一、游戏效果

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();}}}
}

Java联网3D坦克大战(网络编程)相关推荐

  1. ava联网3D坦克大战(网络编程)2020

    .游戏效果 Java网络编程联机3D坦克大战 在这里插入图片描述 在这里插入图片描述 二.游戏涉及知识 服务器端运用了 IO.线程.网络.面向对象.异常 的内容, 客户端使用 unity3d引擎进行开 ...

  2. java写的坦克大战

    坦克大战(Java版本) 实现一个java版本的坦克大战游戏 [功能提示] 1. 游戏要有图形用户界面,界面能够反映游戏所有的细节. 2. 界面中要有坦克,墙,树林,河流. 3. 界面中要有一个&qu ...

  3. Unity学习回忆--3D坦克大战

    2023年LPL春季赛季后赛正在火热进行中,你们心中的总冠军是哪支队伍呢?作为热爱游戏的程序猿,一起来聊聊你那些有意义的游戏开发经历吧! 前言 还记得大一的时候第一次接触编程,为了手写一个hello, ...

  4. 3D坦克大战游戏源码

    3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...

  5. Java核心类库篇8——网络编程

    Java核心类库篇8--网络编程 1.七层网络模型 OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985 年研究的网络互连模型. 当发 ...

  6. java小球碰撞实验报告_20155317 《Java程序设计》实验五网络编程与安全实验报告...

    20155317 <Java程序设计>实验五网络编程与安全实验报告 遇到问题 在刚开始启动客户端或者服务端时,出现了一系列的错误情况,总是提示异常信息 后来经过询问同学,反应将端口号修改一 ...

  7. java自动化测试语言高级之网络编程

    java自动化测试语言高级之网络编程 文章目录 java自动化测试语言高级之网络编程 Java 网络编程 Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来 ...

  8. js版 3D坦克大战 V0.5

    欢迎体验js版的 3D坦克大战 V0.5 测试地址:http://121.199.29.66:88/. 目前只支持新版本的的chrome浏览器,有时同时进入的玩家较多,暂没有分房间,导致偶尔会较卡,请 ...

  9. unity学习3D坦克大战(六)

    Unity 3D坦克大战案列学习(五) 实现相机视野的跟随 using UnityEngine; using System.Collections; /// <summary> /// 控 ...

  10. unity学习3D坦克大战(一)

    Unity 3D坦克大战案列学习(一) 实现坦克移动和转向 using UnityEngine; using System.Collections; public class TankMovement ...

最新文章

  1. leetcode算法第8题
  2. 【原】ASP.Net WebForm的发布(图解)
  3. static变量初始化
  4. 条件随机场 python_用条件随机场做网络小说命名实体识别
  5. oracle 删除补全日志组_Oracle 10g 添加、删除日志组
  6. bisect git 使用_Git使用过程中的一些常见场景问题总结
  7. jax-rs注解工作原理介绍
  8. 你可能没有想过自己缺钱花的原因
  9. sql azure 语法_Azure Data Studio中SQL Server架构比较扩展
  10. Thrift 个人实战--Thrift RPC服务框架日志的优化
  11. 51单片机简谱音乐3-音阶与频率表问题以及简谱小笔记
  12. Android 360分包,如何安装分包app安装包
  13. CFD:用软件完成流体仿真分析(step1)
  14. win10如何显示文件后缀
  15. Linux网卡驱动分析
  16. 3.19百度移动端 一连三面
  17. MySQL学生综合测评系统_大学生综合测评系统的设计和实现(MySQL)
  18. ses控制硬盘指示灯亮灭
  19. 手机系统日历如何与备忘录中的待办任务联动同步
  20. 鲁大师、360等难以卸载软件的卸载方法

热门文章

  1. 在oracle中 缺失关键字,缺失关键字解决方案
  2. Poj 2992 Divisors(算数基本定理素数因子个数)
  3. python 回溯法 01背包问题_Python基于回溯法解决01背包问题实例
  4. mysql数据查询(DQL)
  5. 指导手册05:MapReduce编程入门
  6. python创建列表以及列表的操作(插入-删除-索引-交换元素值-切片)
  7. fmod使用fader dsp控制音量——不影响频谱采样nice
  8. CSS第7章上机练习1(制作QQ会员页面导航)
  9. 从今往后,我也有了我自己的博客
  10. centos配置虚拟主机(站点)