Networking noob here, I have followed this https://love2d.org/wiki/Tutorial:Networking_with_UDP tutorial and it works just fine on my own PC with client and server running (localhost). What I do not fully understand is why I cannot get a client working on another PC with the server running on this PC.
To be clear: I have client running (as in the tutorial above) but the address variable is set to '192.[..blah blah...]' (my IPv4 address!). The server is running on my pc. They don't connect.
Is it a firewall issue? Am I naiively missing something?
Further context: I want to make a very very simple networked game so that down the line I can adapt my current game - a turn-based strategy - to allow networked battles.
Thank you for reading.
[solved] Networking (UDP) - how to connect?
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
[solved] Networking (UDP) - how to connect?
Last edited by 4xEmpire on Thu Aug 05, 2021 11:03 am, edited 1 time in total.
Re: Networking (UDP) - how to connect?
Are you using address "*" in the server? Is everyone using the same port?
Tools: Hot Particles, LuaPreprocess, InputField, (more) Games: Momento Temporis
"If each mistake being made is a new one, then progress is being made."
"If each mistake being made is a new one, then progress is being made."
Re: Networking (UDP) - how to connect?
Thanks for replying
Yes, "*" in the server following the tutorial, and yes to the port as well.
Re: Networking (UDP) - how to connect?
Hmm, could you maybe share the relevant code?
Tools: Hot Particles, LuaPreprocess, InputField, (more) Games: Momento Temporis
"If each mistake being made is a new one, then progress is being made."
"If each mistake being made is a new one, then progress is being made."
Re: Networking (UDP) - how to connect?
Are both PCs in a LAN?
Re: Networking (UDP) - how to connect?
The client is copy paste from the tutorial. The server was copied as well, but I adapted it to run in love2D format since it was just presented as pure lua code.
I appreciate any steer/insight you're able to give me
This is the client. (NB "localhost" below was replaced with the relevant IPv4 address)
Code: Select all
local socket = require 'socket'
local address, port = "localhost", 12345
local entity
local updaterate = 0.1
local world = {}
local t
function love.load()
udp = socket.udp()
udp:settimeout(0)
udp:setpeername(address, port)
math.randomseed(os.time())
entity = tostring(math.random(99999))
local dg = string.format("%s %s %d %d", entity, 'at', 320, 240)
udp:send(dg)
t = 0
end
function love.update(dt)
t = t + dt
if t>updaterate then
local x,y = 0,0
if love.keyboard.isDown('up') then y = y - (20*t) end
if love.keyboard.isDown('down') then y = y + (20*t) end
local dg = string.format("%s %s %f %f", entity, 'move', x, y)
udp:send(dg)
local dg = string.format("%s %s $", entity, 'update')
udp:send(dg)
t = t-updaterate
end
repeat
data, msg = udp:receive()
if data then
ent, cmd, parms = data:match("^(%S*) (%S*) (.*)")
if cmd == 'at' then
local x, y = parms:match("^(%-?[%d.e]*) (%-?[%d.e]*)$")
assert(x and y)
x, y = tonumber(x), tonumber(y)
world[ent] = {x=x, y=y}
else
print("unrecognised command:", cmd)
end
elseif msg ~= 'timeout' then
error("Network error: "..tostring(msg))
end
until not data
end
function love.draw()
for k, v in pairs(world) do
love.graphics.print(k, v.x, v.y)
end
end
Code: Select all
local socket = require "socket"
local udp
local world = {} -- the empty world-state
local data, msg_or_ip, port_or_nil
local entity, cmd, parms
local running = true
local ticker = 0
function love.load()
udp = socket.udp()
udp:settimeout(0)
udp:setsockname('*', 12345)
end
function love.update(dt)
ticker = ticker + dt
if not running then
if ticker>0.1 then
running = true
end
end
if running then
data, msg_or_ip, port_or_nil = udp:receivefrom()
if data then
-- more of these funky match paterns!
entity, cmd, parms = data:match("^(%S*) (%S*) (.*)")
if cmd == 'move' then
local x, y = parms:match("^(%-?[%d.e]*) (%-?[%d.e]*)$")
assert(x and y) -- validation is better, but asserts will serve.
-- don't forget, even if you matched a "number", the result is still a string!
-- thankfully conversion is easy in lua.
x, y = tonumber(x), tonumber(y)
-- and finally we stash it away
local ent = world[entity] or {x=0, y=0}
world[entity] = {x=ent.x+x, y=ent.y+y}
elseif cmd == 'at' then
local x, y = parms:match("^(%-?[%d.e]*) (%-?[%d.e]*)$")
assert(x and y) -- validation is better, but asserts will serve.
x, y = tonumber(x), tonumber(y)
world[entity] = {x=x, y=y}
elseif cmd == 'update' then
for k, v in pairs(world) do
udp:sendto(string.format("%s %s %d %d", k, 'at', v.x, v.y), msg_or_ip, port_or_nil)
end
elseif cmd == 'quit' then
running = false;
else
print("unrecognised command:", cmd)
end
elseif msg_or_ip ~= 'timeout' then
error("Unknown network error: "..tostring(msg))
end
socket.sleep(0.01)
end
end
Re: Networking (UDP) - how to connect?
No they are not, do they need to be for this to work? Sorry if its a silly question.
Re: Networking (UDP) - how to connect?
If they aren't in the same network then you need to worry about port forwarding in the router that the server is connected to. Your clients also need to connect to the Internet-facing IP address - not the internal IP address in the LAN. IP addresses in the range 192.168.x.x are only used inside LANs.
Tools: Hot Particles, LuaPreprocess, InputField, (more) Games: Momento Temporis
"If each mistake being made is a new one, then progress is being made."
"If each mistake being made is a new one, then progress is being made."
Re: Networking (UDP) - how to connect?
Ok thanks I will look into that further.ReFreezed wrote: ↑Wed Aug 04, 2021 8:51 pmIf they aren't in the same network then you need to worry about port forwarding in the router that the server is connected to. Your clients also need to connect to the Internet-facing IP address - not the internal IP address in the LAN. IP addresses in the range 192.168.x.x are only used inside LANs.
For now I have experimented using the sock networking library (https://github.com/camchenry/sock.lua) and I was able to get the client to connect to the server using two different pcs in the same wlan.
Who is online
Users browsing this forum: Google [Bot] and 5 guests