我想使用索卡特作为中继,让我游戏中的两个玩家(均在防火墙后面)相互连接。游戏引擎使用 UDP。玩家 A 将托管游戏服务器,玩家 B 将作为客户端加入,公共服务器 C 将仅充当流量的中继。
我目前正在尝试在本地机器上设置一个测试场景。使用 TCP 的类似测试用例运行良好,但我在 UDP 用例上遇到了困难。
- (A)UDP 回显服务器:
sudo nc -ul ::1 1234
- (C)启动继电器:
socat -d -d UDP6-LISTEN:33000 UDP6-LISTEN:22000
- (A)连接回显服务器到中继:
socat -d -d UDP6:ip6-localhost:33000 UDP6:ip6-localhost:1234
- (B)作为客户端连接:
nc -uvvv ::1 22000
看来 C 从未开始监听 22000(对于 TCP,只要 A 将回显服务器连接到中继,就会发生这种情况)。因此 B 无法连接到 22000。
C 的输出:
$ socat -d -d UDP6-LISTEN:33000,bind=ip6-localhost UDP6-LISTEN:22000,bind=ip6-localhost
2019/06/02 15:42:49 socat[15422] N listening on UDP AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:33000
A 的输出:
$ socat -d -d UDP6:ip6-localhost:33000 UDP6:ip6-localhost:1234
2019/06/02 15:43:05 socat[15436] N opening connection to AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:33000
2019/06/02 15:43:05 socat[15436] N successfully connected from local address AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:34270
2019/06/02 15:43:05 socat[15436] N opening connection to AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:1234
2019/06/02 15:43:05 socat[15436] N successfully connected from local address AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:47053
2019/06/02 15:43:05 socat[15436] N starting data transfer loop with FDs [5,5] and [6,6]
B 实际上没有产生任何输出:
$ nc -uvvv ip6-localhost 22000
$
我确信我一定犯了一些非常基本的错误。提前感谢您提供的任何见解。