Windows 11 玩红警2找不到联机房间?IPXWrapper 让二十多款 IPX/SPX 老游戏在局域网重获新生
【免费下载链接】ipxwrapper项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper
周五晚上八点,你和老同学约好来一局《红色警戒2》,两台 Windows 11 笔记本连着同一个 Wi-Fi,房间里却空空荡荡,谁也没法发现谁。别急着怪网速、怪系统、怪人品——问题出在 Windows 从 Vista 时代就悄悄拆掉的那座桥:IPX/SPX 协议。而 IPXWrapper 这个开源工具,就是专门为老游戏重建这座桥的:它把游戏的 IPX 数据翻译成现代网络听得懂的 UDP/TCP,让二十多款经典游戏的局域网联机原地复活。
那个让红警老玩家集体破防的周五晚上
先讲一个很多人经历过、又很少有人想明白的场景。
你装了《红色警戒2》,双击 exe,主菜单的音乐一响,情怀拉满。然后你满怀期待地进入"网络"选项,建了个房间,喊室友加入——结果对方的列表里一片空白。你俩明明在同一个 Wi-Fi 下,路由器亮着绿灯,微信语音都通着,偏偏游戏就是"看不见"对方。
这时候大多数人的第一反应是:游戏是不是坏了?我的网络是不是被运营商限速了?还是这破游戏需要什么特殊设置?
都不是。
游戏没坏,你的网也没坏。坏的是你面前这套操作系统——它把老游戏赖以生存的"语言环境"给拆了。
反常识的真相:游戏还说着 90 年代的话,可 Windows 已经不听 IPX 了
上世纪九十年代,局域网联机还没有"TCP/IP 一统天下"这回事。那时候的《红警2》《暗黑破坏神》《星际争霸》们,天生只说一种方言:IPX/SPX。同一根网线下的机器,靠这个协议互相报名字、开房间、传数据,顺畅得很。
但时代变了。从 Windows Vista 开始,微软一步步把 IPX/SPX 协议栈从系统里移除。到今天,你的 Windows 11 里已经完全没有"听得懂 IPX 的耳朵"。
这就是问题所在:游戏还在用 90 年代的方言喊话,系统却早就把翻译官辞退了。两边鸡同鸭讲,房间列表当然永远是空的。
那怎么办?总不能给 Windows 重装一遍 20 年前的网络协议吧?IPXWrapper 给出的答案是:不用装协议,直接派一个翻译官守在游戏门口。
一个翻译官,四张"假身份证"
IPXWrapper 的思路,可以想象成在一家老店门口安排了一位随身翻译:
游戏每次想跟 IPX 网络说话,比如"我要广播一条消息"、"我要连接某个地址",都会先敲一扇门——而这扇门(Windows Sockets 接口)已经被 IPXWrapper 悄悄调了包。
编译这个项目(仓库根目录执行make即可,构建工具链需要 GCC、NASM 和 Perl),你会得到四件套:ipxwrapper.dll、wsock32.dll、mswsock.dll、dpwsockx.dll,外加一个图形配置工具ipxconfig.exe。把 DLL 放进游戏目录后,游戏以为自己还在跟当年那套 IPX 接口说话,实际上对面站着的是 IPXWrapper 假扮的"接口替身"。
接下来是真正的魔法:IPX 数据包被塞进 UDP 数据报里,从你现在的网卡广播出去;对端收到后拆开,还原成 IPX 再交给游戏。需要可靠连接的 SPX 流,则走 TCP。中间还有一张"地址小本本"(源码在src/addrcache.c),记录每个远端地址的对应关系,免得包裹送错门。
整个过程,游戏从头到尾不知道发生了什么——它只觉得自己终于又"开口说话"了。
让游戏重新开口:从装上四张"身份证"到开第一局
这是所有老玩家最关心的部分,其实简单得出乎意料。
先把编译好的四个 DLL 全部复制到游戏的可执行文件所在目录。这一步是关键——DLL 必须和游戏 exe 待在同一个文件夹里,它才能抢在系统版本之前被加载。
然后按你的系统位数,双击仓库里的directplay-win32.reg或directplay-win64.reg。32 位 Windows 用前者,64 位用后者,别点反了。这一步补的是 DirectPlay 需要的注册表键——很多老游戏在启动时会去枚举它们,缺了直接罢工。
最后,拉上朋友,两边各自运行游戏,进局域网房间——这次应该能互相看到了。如果你还想调接口、选封装方式,打开ipxconfig.exe这个图形界面,所见即所得。
到这里,你已经完成了 90% 的玩家永远走不到的终点:第一局联机成功。
进阶:多网卡和防火墙,联机不稳的两大隐形杀手
第一局成功之后,很多人会栽在第二个坑里:明明连上了,玩着玩着就掉线,或者时好时坏。
最常见的元凶之一,是"多网卡"。现在的笔记本几乎人手一个有线网卡加一个 Wi-Fi,可能还挂着虚拟网卡。IPXWrapper 默认会在系统里所有网卡上同时工作——听起来很智能,但如果你和朋友不在同一条物理网路上,广播就会发到错误的"岔路口",自然找不到人。
对策很简单:打开ipxconfig.exe,把"主接口"(Primary interface)明确指到你正在用的那张网卡上。如果你和朋友共享的不止一个网络,这一步几乎可以说是必做的。
另一个隐形杀手是防火墙。游戏第一次发包时,Windows 防火墙可能会默默把连接掐掉,而游戏那边只显示"连接超时"。好在项目早就想到了:在配置里打开"自动创建防火墙例外"(firewall exception = yes),启动时自动放行,省去手动折腾的功夫。
还有一个 0.7.1 版本加入的性能开关值得知道:coalesce packets = yes。它的作用是"打包发货"——当游戏一瞬间往外扔出大量小包时,IPXWrapper 把它们攒成一摞大包再发,减少丢包、提升吞吐。像《星际争霸》这种对延迟和包量都敏感的游戏,这个开关往往就是"流畅"和"幻灯片"的分界线。注意:这个选项需要所有参与联机的机器都升级到 0.7.1 或更新版本。
高手玩法:把局域网搬上互联网
局域网搞定了,下一个问题自然浮现:朋友在另一个城市怎么办?
IPXWrapper 给了两条路,都藏在ipxconfig.exe的封装方式选项里。
第一条路是DOSBox UDP 封装。如果你或者你的朋友手头有台 DOSBox 服务器(比如你自己搭的、或者朋友开的),把它的地址和端口填进去——配置里写dosbox server address和dosbox server port,默认端口 213——所有玩家的 IPX 数据就会先汇聚到这台服务器,再由它统一分发。这相当于给局域网装了个"云端中转站",跨城联机不再遥不可及。有个前提得记住:这种模式下 SPX 连接不可用,纯 IPX 的游戏没问题,需要 SPX 可靠连接的游戏就别走这条路。
第二条路更硬核:真·IPX 帧传输。如果你的软件必须收发真正的 IPX 帧——比如要跟一台只认 IPX 的老设备通信——装上 WinPcap,然后在配置里选择"Real IPX encapsulation"。数据会以真实的 IPX 帧格式出现在线缆上,连老古董设备都能对话。同样地,这条路上 SPX 也不支持。
顺便一提,从 0.7.1 开始,配置可以不写进注册表:只要在游戏目录放一个ipxwrapper.ini(仓库里有现成的ipxwrapper.ini.example模板),里面的设置就会覆盖注册表里的旧配置。每款游戏一份独立配置,想怎么折腾都行。
三个翻车现场复盘:他们的教训,你直接抄
翻车现场一:四个人开黑红警2,第三个玩家一加入就崩。症状很诡异:两人、三人局都好好的,第四个人一进来,房间就散。查了一圈,问题出在 DirectPlay 服务提供方的多人逻辑上——早期版本的 IPXWrapper 在 3 人以上的对局里确实有坑。好在 0.6.0 版本专门修了这个问题(changes.txt里白纸黑字写着"Fix 3+ players in some/most DirectPlay games")。所以这类问题的最优解很简单:永远用最新版本,修过的坑就别再踩一遍。
翻车现场二:星际争霸联机,开局十分钟开始卡成 PPT。游戏对网络极敏感,一局里要发成千上万个小包,任何一个包丢了都可能造成明显的卡顿。解决方案就是前面说的coalesce packets = yes,把散弹换成整箱发货,吞吐立刻不一样。这类"高包量游戏卡顿"的问题,几乎都可以先试这个开关。
翻车现场三:笔记本又插网线又连 Wi-Fi,朋友就是找不到你。广播发错了网卡,房间自然隐身。把ipxconfig.exe里的主接口指定到和朋友们同一张网卡上,立刻现身。所有"能上网但游戏里找不到人"的灵异事件,先检查这个,八成是它。
老游戏联机避坑速查表
| 症状 | 常见原因 | 对应解法 |
|---|---|---|
| 启动报 DLL 错误 | 四个 DLL 没放齐,或放错目录 | 确认ipxwrapper.dll等四件套都在游戏 exe 同目录 |
| 注册表双击没反应 | 32/64 位 reg 文件选错 | 64 位系统用directplay-win64.reg,32 位用directplay-win32.reg |
| 能上网但游戏里找不到人 | 多网卡广播走错接口 | 在ipxconfig.exe里明确指定主接口 |
| 连上就掉、时断时续 | 防火墙拦截 | 开启firewall exception = yes |
| 高包量游戏严重卡顿 | 小包太多导致丢包 | 所有玩家开启coalesce packets = yes(需 0.7.1+) |
| DOSBox 模式下连不上 | 该模式不支持 SPX | 改用纯 IPX 游戏,或换默认 UDP 封装 |
| 别人能连就你不能 | 双方配置不一致 | 统一接口、封装方式和版本,再试 |
想再往深走?这几个入口够你逛一阵子
如果你玩着玩着开始好奇"它到底是怎么骗过游戏的",项目源码是现成的教材:
src/router.c:数据包路由与封装的核心,包怎么进、怎么出,都在这里src/directplay.c:DirectPlay 服务提供方,老游戏联机体验的幕后功臣src/winsock.c与src/ipxwrapper.c:WinSock 拦截与总控逻辑tests/:一整套自动化测试,覆盖地址缓存、以太网封装、联机对局等场景tools/:ipx-send、ipx-recv、spx-client等调试工具,手动发包验证网络很有用changes.txt:从 0.4.0 到 0.7.1 的完整版本史,每个修复都写得明明白白
想自己动手编译,Makefile里写得很清楚;想理解设计思路,根目录的readme.txt和readme.dev.txt是官方入口,花十分钟读完,你对这个工具的理解会超过 99% 的玩家。
写在最后
想象这样一个晚上:窗外下着雨,屏幕里 20 年前的小坦克重新开动,耳机里传来那句熟悉的 "Unit ready"。你敲下回车,问屏幕那头的朋友:"看到了吗?"他说:"看到了。"
就为这一句"看到了",有人写了十几年代码。而你只花了五分钟。
你的硬盘里,还躺着哪款等着被重新唤醒的老游戏?它叫什么名字?说不定,下一个周五晚上,它就能重新"开口说话"。
想立刻动手?克隆仓库并编译,四件套到手后按上面的步骤走一遍:
git clone https://gitcode.com/gh_mirrors/ip/ipxwrapper,进入目录执行make,然后复制 DLL、双击对应的 reg 文件,打开ipxconfig.exe开始配置你的第一局联机。
【免费下载链接】ipxwrapper项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考