使用Java实现魔兽争霸3冰封王座联网

news/2024/7/8 1:45:00 标签: java, 前端, 后端, 游戏

作者:cloudy491

顺便吆喝一声,如果你计算机、软件工程、电子等相关专业本科及以上学历,欢迎来共事。前端/后端/测试等均可投→技术大厂机会。

背景

自己实现搭建网络,在非同一个局域网下也可以玩魔兽争霸3冰封王座。一般我们是通过平台上玩魔兽争霸3地图,比如浩方平台,kk对战平台,何不自己尝试搭建一个。

分析

首先应用层下的运输层是使用的是tcp或者udp协议,我们可以通过Wireshark工具去抓包观察数据包走向。我们用Wireshark抓包那么多包,怎么知道那些数据包是魔兽争霸3的数据包。其实我们可以通过下面cmd命令查到应用进程,并通过进程查出他们的协议和端口。

如下图,你会发现魔兽争霸3居然tcp和udp用了同一个端口6112,不是说同一个ip的tcp和udp不能同一个端口吗,原来同一个应用是下是可以tcp和udp占同一个端口的。

拿到协议和端口,我们可以在Wireshark监听以太网并且过滤一下,在过滤栏输入

添加图片注释,不超过 140 字(可选)

你会发现当你在局域网在创建房间才会看到数据包,255.255.255.255那不是广播地址吗,那不是创建房间后就广播出去,告诉其他电脑我已经开好房了,如图↓

我这边用了Hyper-V虚拟机快速创建的window11系统,新打开一个魔兽争霸3客户端,在局域网中可以看到我刚才的创建的房间,但是在Wireshark监听的以太网是没看到新的数据包,说明虚拟机的数据包是没有走本地的以太网的,而是直连的。那我们可以通过Wireshark监听vEthernet(Default Switch)虚拟机网络,虚拟机中用魔兽争霸3创建房间,自己电脑则进入房间,你会看到一下面抓的数据包。

上面抓包信息,可以看到先是udp协议后,才开tcp协议。大概是流程是,魔兽争霸3在局域网选择房间界面时会监听6112端口广播,收到广播后向目标ip发送udp信息询问房间信息,目标客户端就会通过udp返回房间信息。当我们点击房间的时候,就会和目标ip进行tcp协议连接,这就是上面数据包的流程。

思路

通过上面的分析,数据就是先经过udp后经过tcp,那我们只要把这边魔兽争霸3udp广播的数据发送到另一个魔兽争霸3客户端中,让他们相互交换数据,之后在让他们建立tcp连接交换数据。因为不通过局域网,我们需要让他连接一个服务器,服务器有两个端口一个是用来交换udp数据的,另一个用来交换tcp数据的。

udp数据走向如上图,魔兽争霸3应用是监听了udp:0.0.0.0:6112,我们可以通过java应用监听udp:192.168.1.10:6112拿到广播,再通过java创建一个创建一个客户端连接服务端,通过服务端把数据传到另一台电脑上java客户端上,最后让java客户端发送到另一台的魔兽争霸3上。

tcp数据走向如上图,这个看起来复杂些,一个魔兽争霸3客户端的需要连接另一个魔兽争霸3客户端时,先下发指令告诉另一台客户端需要连接,赶紧连接服务端,然后在服务端等待队列连接,另一台魔兽争霸3连接成功时,就会加到服务器等待队列中,最后得到两个魔兽争霸3客户端连接就可以交换数据。

测试

用本机电脑加虚拟机跑魔兽争霸3,连接云服务测试是可以跑通的。

代码

感兴趣可以下载代码跑跑。断续/war3Demo


http://www.niftyadmin.cn/n/5535973.html

相关文章

C#——Path类详情

Path类 在C#中,文件和目录的操作是编程中常见的需求,而.NET Framework为我们提供了一个名为Path的类,用于进行文件的路径操作。 Path常用方法 相对路径转为绝对路径GetFullPath(string relativePath) string relativePath "..\\exam…

C++指针内存分配与释放

文章目录 指针分配与释放 :C new/delete VS C malloc/freeC new/deleteC malloc/free 指针销毁智能指针 指针分配与释放 :C new/delete VS C malloc/free new:分配内存、调用类的构造函数。delete:调用类的析构函数和释放内存&am…

xml_woarchive undefined symbol

最近在linux中编译一个自己写的老代码。是个C动态库。可以编译成功,但直到运行的时候才报 boost xml_woarchive undefined symbol. 解决的方法是在编译时要加上 wserialization 库。 注意,这个库有含 w 和不含 w 两个。在我这里需要使用含 w 的。 如果…

Rethinking Federated Learning with Domain Shift: A Prototype View

CVPR2023,针对分布式数据来自不同的域时,私有模型在其他域上表现出退化性能(具有域转移)的问题。提出用于域转移下联邦学习的联邦原型学习(FPL)。核心思想是构建集群原型和无偏原型,提供富有成效的领域知识和公平的收敛目标。将样本嵌入拉近到属于相同语义的集群原型,而…

8人团队历时半年打造开源版GPT-4o,零延迟演示引爆全网!人人可免费使用!

目录 01 Moshi 02 背后技术揭秘 GPT-4o可能要等到今年秋季才会公开。 然而,由法国8人团队开发的原生多模态Moshi,已经达到了接近GPT-4o的水平,现场演示几乎没有延迟,吸引了大量AI专家的关注。 令人惊讶的是,开源版的…

基于惯性加权PSO优化的目标函数最小值求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于惯性加权PSO优化的目标函数最小值求解matlab仿真。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 (完整程序运行后无水印)…

【C++】 C/C++预处理器介绍

C预处理器(Preprocessor)是编译过程中的一个阶段,它在编译器进行实际编译之前对源代码进行处理。预处理器提供了一系列的指令,用于条件编译、文件包含、宏定义等操作。以下是一些常见的预处理器指令: 宏定义&#xff…

LLMs:《Rethinking open source generative AI open-washing and the EU AI Act》翻译与解读

LLMs:《Rethinking open source generative AI open-washing and the EU AI Act》翻译与解读 导读:这篇文章阐述了开放源码生成式人工智能(generative AI)模型的一个新方式,并提出了一个开放度评估框架。 背景:去年众多语言模型开…