如何将服务器上的客户端连接委派给另一个客户端。

我正在使用Lua构建一个精简的游戏服务器。服务器本身只提供游戏大厅功能。它接受客户端连接,允许玩家加入房间(或游戏),然后将客户端信息委派给组,并且其中一个客户端还充当游戏管理员,在游戏期间直接通过点对点连接与其他客户端通信。

所有客户端都成功连接到大厅服务器,并且服务器会将其IP信息发送回来,以便他们尝试相互连接。我面临的问题是客户端无法连接到其中一个客户端上的游戏管理器。似乎IP不正确或传入的连接被阻止,尽管与大厅的出站连接正常工作。

我是多人游戏编程的新手,所以我可能会遗漏一些简单的东西,但我无法找到任何有用的帖子。

这是项目中的代码片段: 选定客户端上的游戏管理器尝试监听传入的客户端

function Server:connect()

    local tcp, err = socketlib.bind( '*', self.port )
    if err then
        print("Game Instance Sever Error: ".. err)
    else
        tcp:settimeout( 0 )
        self.socket = tcp
    end

    local function pulse()
        repeat
            local client = tcp:accept()
            if client then
                self:handleClient(client)
            end
        until not client
    end

    --== Start listening
    if self.socket then
        self.serverPulse = timer.performWithDelay( 100, pulse, 0 )
    end
    return self.host
end

以及连接到游戏管理器的客户端连接方法。它接受远程服务器的连接信息:

function GameClient:connect( connection_table )
    self.host = connection_table.host
    self.port = connection_table.port

    self.player_handle = connection_table.handle or nil

    --== Init socket
    self.socket = socketlib.tcp()

    --== Connect to server
    local success, msg = self.socket:connect( self.host, self.port )
    if success then
       --Do Something
    else
       --Error
    end
end

请注意,如果我在本地网络(LAN)上发送客户端的内部IP,则该过程成功,其余客户端可以加入游戏。但是,使用客户端的公共IP不起作用。此外,所有客户端都使用动态IP,因此我们无法构建预定义的IP池。

点赞