Pro*_*oGM 3 sockets lua luasocket coronasdk
我正在尝试使用LuaSocket库测试Corona SDK中是否存在互联网连接.
我找到了这个解决方案
function test()
local connection = socket.tcp()
connection:settimeout(1000)
local result = connection:connect("www.google.com", 80)
connection:close()
if (result) then return true end
return false
end
Run Code Online (Sandbox Code Playgroud)
但它有一个问题:如果连接错误/不稳定,程序将被阻塞,直到套接字运行(持续不同的秒数).
所以我试着这样:
connection:settimeout(1000, 't')
Run Code Online (Sandbox Code Playgroud)
但它非常不准确(在网络滞后的情况下会返回false).有一个更好的方法?
也许让套接字没有阻塞?
更新2: 我尝试了这段代码,但我真的不明白它是否有意义......
local socket = require("socket")
function test(callback, timeout)
if timeout == nil then timeout = 1000 end
local connection = socket.tcp()
connection:settimeout(0)
connection:connect("www.google.com", 80)
local t
t = timer.performWithDelay( 10, function()
local r = socket.select({connection}, nil, 0)
if r[1] or timeout == 0 then
connection:close()
timer.cancel( t )
callback(timeout > 0)
end
timeout = timeout - 10
end , 0)
end
Run Code Online (Sandbox Code Playgroud)
它始终返回"无连接"
最后,我找到了一种让它适用于所有设备的方法.谢谢hades2510:
---------------------------------------
-- Test connection to the internet
---------------------------------------
local socket = require("socket")
local connection = {}
local function manual_test(callback, timeout)
if timeout == nil then timeout = 1000 end
local connection = assert(socket.tcp())
connection:settimeout(0)
local result = connection:connect("www.google.com", 80)
local t
t = timer.performWithDelay( 10, function()
local r, w, e = socket.select(nil, {connection}, 0)
if w[1] or timeout == 0 then
connection:close()
timer.cancel( t )
callback(timeout > 0)
end
timeout = timeout - 10
end , 0)
end
local isReachable = nil
function connection.test(callback)
if network.canDetectNetworkStatusChanges then
if isReachable == nil then
local function networkListener(event)
isReachable = event.isReachable
callback(isReachable)
end
network.setStatusListener( "www.google.com", networkListener )
else
callback(isReachable)
end
else
manual_test(callback)
end
end
return connection
Run Code Online (Sandbox Code Playgroud)
https://gist.github.com/ProGM/9786014
| 归档时间: |
|
| 查看次数: |
1937 次 |
| 最近记录: |