Skip to content
返回

通过 Java 实现《魔兽争霸3:冰封王座》局域网连接实战

Updated:  at  15:15

1. 魔兽争霸3 局域网连接流程

在局域网中进行《魔兽争霸3:冰封王座》联机时,玩家通过 UDP 广播来查询可用的房间信息,点击房间后通过 TCP 连接进入游戏。

流程图

flow

可以将以下代码粘贴到 mermaid 进行可视化查看:

sequenceDiagram
    participant 用户A(客户端)
    participant 用户B(已建房)
    participant 用户C(点击后建房)

    %% A 已是房主
    loop 每5秒
        用户B(已建房)->>局域网广播: UDP 广播房间信息
    end

    %% 点击“局域网”
    Note over 用户A(客户端): 点击“局域网”
    用户A(客户端)->>局域网广播: UDP 广播:请求房间信息
    局域网广播-->>用户B(已建房): 收到用户A(客户端)广播

    用户B(已建房)-->>用户A(客户端): UDP 回复房间信息

    %% B 初始不是房主,后续建房
    Note over 用户C(点击后建房): 点击“创建房间”<br>变成房主
    用户C(点击后建房)->>局域网广播: UDP广播房间信息(主动)
    局域网广播-->>用户A(客户端): 收到用户C(点击后建房)广播
    用户A(客户端)->>用户C(点击后建房):UDP 广播:请求房间信息
    用户C(点击后建房)-->>用户A(客户端): UDP 回复房间信息
    loop 每5秒
        用户C(点击后建房)->>局域网广播: UDP 广播房间信息
    end

    %% C 发起连接
    Note over 用户A(客户端): 点击用户B的房间
    用户A(客户端)->>用户B(已建房): TCP 连接请求
    用户B(已建房)-->>用户A(客户端): TCP 连接建立成功

2. 系统架构分析

在实现《魔兽争霸3》局域网联机时,UDP 和 TCP 连接都需要目标 IP 地址。为了避免真实网络的影响,可以使用回环地址(例如 127.0.0.2、127.0.0.3、127.0.0.4)来模拟局域网。

每个回环地址对应一个虚拟的局域网,通过 Java 客户端绑定这些 IP 地址,并监听 TCP 和 UDP 的 6112 端口。所有数据都通过 Java 服务端进行分发。具体过程如下:

  1. 客户端通过 UDP 广播请求房间信息;
  2. 服务端接收并转发请求,返回房间数据;
  3. 客户端发起 TCP 连接请求,进入选定的游戏房间。

流程图

design

3. 技术要点

4. 完整代码

完整代码:https://gitcode.com/qq_34854236/war3-connection



上一篇
基于Java与Wintun实现《魔兽争霸3》跨网络联机实战
下一篇
Java 各种 IO 模型端口转发性能对比实测(BIO、NIO、AIO、虚拟线程)