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