文章重写如下:
作者:cloudy491
声明:如果你拥有计算机科学、软件工程、电子等相关专业的本科或以上学历,并热衷于相关技术,欢迎加入我们。我们正在招聘前端/后端/测试岗位的OD软件工程师,你拥有进入技术大厂的机会。
背景:
魔兽争霸3冰封王座是一款深受玩家喜爱的游戏,玩家通常通过平台(如浩方平台、kk对战平台)来寻找对手。但是,有没有想过如果我们能自己搭建一个这样的网络,使玩家在不处于同一局域网下也能畅快地玩魔兽争霸3呢?
分析:
首先,魔兽争霸3使用的是TCP或UDP协议。通过Wireshark抓包工具,我们可以观察到数据包在网络中的走向。那么,如何判断哪些数据包是魔兽争霸3的数据包呢?我们可以利用CMD命令来查看应用进程,并通过进程找到其使用的协议和端口。
如第一张图所示,魔兽争霸3在TCP和UDP中使用了相同的端口6112。这似乎在挑战我们的网络知识,因为通常情况下,同一IP的TCP和UDP是不能使用相同端口的。然而,在实际应用中,同一个应用确实可以同时使用TCP和UDP的同一端口。
第二张图显示了如何通过CMD命令找到魔兽争霸3使用的协议和端口。
有了协议和端口信息后,我们可以在Wireshark中监听以太网并设置过滤。在过滤栏中输入特定的协议和端口信息,我们就可以观察到数据包在局域网中的流动情况。例如,当你在局域网中创建了一个房间,你会看到一个广播地址255.255.255.255的数据包,这就是向其他电脑广播你已经开好房的信息。
第三张图展示了在虚拟机中创建一个新的魔兽争霸3客户端,并通过Wireshark观察数据包的流动。你会发现,虚拟机的数据包并没有通过本地的以太网,而是直接连接到虚拟机网络。
结合上述信息,我们可以得出一个基本的结论:魔兽争霸3在局域网中选择房间时,会先通过UDP广播询问房间信息,收到广播的客户端再通过UDP返回房间信息。当玩家点击房间时,会与目标IP建立TCP连接。
思路:
我们可以利用这个流程,让魔兽争霸3的UDP广播数据发送到另一个魔兽争霸3客户端中,再让他们建立TCP连接进行数据交换。因为不通过局域网,我们需要设置一个服务器,这个服务器有两个端口,一个用于交换UDP数据,另一个用于交换TCP数据。
第四张图展示了UDP数据的流动方式。魔兽争霸3应用监听在UDP的0.0.0.0:6112端口,我们可以通过Java应用监听在192.168.1.10:6112端口,获取到广播数据,并通过Java应用将数据发送到另一台电脑上。
第五张图展示了TCP数据的流动方式。当一个魔兽争霸3客户端需要连接另一个客户端时,会下发指令告诉另一台客户端连接服务器。服务器等待队列连接,另一台魔兽争霸3连接成功时,会加入到服务器等待队列中。最后,两个魔兽争霸3客户端连接成功,就可以交换数据。
测试:
我们在本机电脑和虚拟机上同时运行魔兽争霸3,并进行了云服务测试,结果是成功的。
代码:
如果你对此项目感兴趣,可以下载我们的代码进行尝试。
图片保持不变,这里无法直接插入,请按照原文中的URL访问以查看图片。
注意:代码和项目的具体细节可能会根据作者的最新更新或变化而有所不同,上述内容仅供参考和启发。