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

时间:2015-11-05 17:50:45

标签: sockets lua network-programming corona multiplayer

我正在使用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池。

0 个答案:

没有答案
相关问题