我试图将使用Lua的Windows计算机游戏连接到用Ruby编写并在同一网络上的Macbook上托管的外部服务器。
这是在游戏开始时执行的Lua代码
socket = require("socket")
udp = socket.udp()
udp:setpeername('192.168.0.17', 9100) -- This is my laptop
udp:settimeout(0.001)
这个Lua代码在每个模拟步骤中执行:
udp:send("Simulation step")
message = udp:receive()
print(message)
这是Ruby服务器:
i = 0
Socket.udp_server_loop(9100) {|msg, msg_src|
puts i.to_s + ": " + msg + " | " + msg_src.inspect.to_s
i += 1
msg_src.reply i.to_s + ": reply from server"
}
到目前为止,游戏收到了来自服务器"的回复。正确地,打印它,我可以在我的笔记本电脑上的Ruby控制台中看到:
19: Simulation step | #<Socket::UDPSource: 192.168.0.80:55697 to 192.168.0.17:9100>
但是我想更加异步 - 我希望不断收到数据并且只是不时地发送回来的东西。我想通过UDP我不必担心连接 - 只需发送消息就可以了。
我在Ruby中试过这个:
require 'socket'
s = UDPSocket.new
while 1 do
s.send "hi", 0, "192.168.0.80", 9100
end
Luasocket没有收到。将超时时间增加到1秒并没有帮助。将端口更改为Windows用于发送UDP数据包的端口(55697)并不起作用。
两台计算机上都禁用了防火墙。
当我要发送内容时发送msg_src.reply
是不可行的,它通常会花一些时间进行计算,不会按时回复(超时前0.001秒)
如何使用UDP执行此操作?或者也许它不可能,我应该尝试使用TCP?