Lua在计算机之间的UDP通信不起作用。

我的 UDP 代码在从电脑 1 发送到电脑 2 时无法工作,但从电脑 2 发送到电脑 1 时可以工作。我在同一台计算机上尝试了两种情况,预期结果一切正常。这些计算机通过局域网以太网相连,Windows 可以识别计算机并让我登录并读取/写入计算机。

服务端:

local socket = require "socket"

-- begin
local udp = socket.udp()
udp:settimeout(1)
udp:setsockname('*', 12345)
local data, msg_or_ip, port_or_nil
local cmd, parms
local running = true
print "Beginning server loop."
while running do
    data, msg_or_ip, port_or_nil = udp:receivefrom()
    if data then
        print(data,msg_or_ip,port_or_nil)
        udp:sendto(data,msg_or_ip,port_or_nil)
    elseif msg_or_ip ~= 'timeout' then
        print("Unknown network error: "..tostring(msg))
    end

    socket.sleep(0.01)
end

客户端:

local socket = require "socket"
local address, port = "192.168.137.161", 12345
udp = socket.udp()
udp:settimeout(1)
while true do
    udp:setpeername(address, port)
    udp:send(io.read())
    udp:close()
    --udp:setsockname("*",12345)
    data, msg_or_ip, port_or_nil = udp:receivefrom()
    print(data, msg_or_ip, port_or_nil)
    udp:close()
end

客户端发送消息,服务端获取消息并应该立刻回显,但客户端却输出 nil refused nil,其中 nil 和 refused 之间有一个制表符。 我认为这主要是从服务器计算机发送到客户端计算机的问题,因为它应该只是回显数据。

我可以理解这个问题很难回答,因为不是每个人都可以同时完全访问两台计算机。作为记录,Lua 5.1 在两台计算机上都使用,Socket 在两台计算机上都是 v2.0.2。

点赞
用户4656299
用户4656299

对于所有疑惑的人,原因是我关闭了套接字。没有什么大不了的。

2015-06-09 16:13:44