Java联网3D坦克大战(网络编程)
一、游戏效果
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坦克大战(网络编程)相关推荐
- ava联网3D坦克大战(网络编程)2020
.游戏效果 Java网络编程联机3D坦克大战 在这里插入图片描述 在这里插入图片描述 二.游戏涉及知识 服务器端运用了 IO.线程.网络.面向对象.异常 的内容, 客户端使用 unity3d引擎进行开 ...
- java写的坦克大战
坦克大战(Java版本) 实现一个java版本的坦克大战游戏 [功能提示] 1. 游戏要有图形用户界面,界面能够反映游戏所有的细节. 2. 界面中要有坦克,墙,树林,河流. 3. 界面中要有一个&qu ...
- Unity学习回忆--3D坦克大战
2023年LPL春季赛季后赛正在火热进行中,你们心中的总冠军是哪支队伍呢?作为热爱游戏的程序猿,一起来聊聊你那些有意义的游戏开发经历吧! 前言 还记得大一的时候第一次接触编程,为了手写一个hello, ...
- 3D坦克大战游戏源码
3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...
- Java核心类库篇8——网络编程
Java核心类库篇8--网络编程 1.七层网络模型 OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985 年研究的网络互连模型. 当发 ...
- java小球碰撞实验报告_20155317 《Java程序设计》实验五网络编程与安全实验报告...
20155317 <Java程序设计>实验五网络编程与安全实验报告 遇到问题 在刚开始启动客户端或者服务端时,出现了一系列的错误情况,总是提示异常信息 后来经过询问同学,反应将端口号修改一 ...
- java自动化测试语言高级之网络编程
java自动化测试语言高级之网络编程 文章目录 java自动化测试语言高级之网络编程 Java 网络编程 Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来 ...
- js版 3D坦克大战 V0.5
欢迎体验js版的 3D坦克大战 V0.5 测试地址:http://121.199.29.66:88/. 目前只支持新版本的的chrome浏览器,有时同时进入的玩家较多,暂没有分房间,导致偶尔会较卡,请 ...
- unity学习3D坦克大战(六)
Unity 3D坦克大战案列学习(五) 实现相机视野的跟随 using UnityEngine; using System.Collections; /// <summary> /// 控 ...
- unity学习3D坦克大战(一)
Unity 3D坦克大战案列学习(一) 实现坦克移动和转向 using UnityEngine; using System.Collections; public class TankMovement ...
最新文章
- leetcode算法第8题
- 【原】ASP.Net WebForm的发布(图解)
- static变量初始化
- 条件随机场 python_用条件随机场做网络小说命名实体识别
- oracle 删除补全日志组_Oracle 10g 添加、删除日志组
- bisect git 使用_Git使用过程中的一些常见场景问题总结
- jax-rs注解工作原理介绍
- 你可能没有想过自己缺钱花的原因
- sql azure 语法_Azure Data Studio中SQL Server架构比较扩展
- Thrift 个人实战--Thrift RPC服务框架日志的优化
- 51单片机简谱音乐3-音阶与频率表问题以及简谱小笔记
- Android 360分包,如何安装分包app安装包
- CFD:用软件完成流体仿真分析(step1)
- win10如何显示文件后缀
- Linux网卡驱动分析
- 3.19百度移动端 一连三面
- MySQL学生综合测评系统_大学生综合测评系统的设计和实现(MySQL)
- ses控制硬盘指示灯亮灭
- 手机系统日历如何与备忘录中的待办任务联动同步
- 鲁大师、360等难以卸载软件的卸载方法