2015年4月8日 星期三

[Corona SDK] 如何取得local IP和Public Internet IP?

如果我們是透過某個AP連上網路,
AP會給你的裝置一個local IP,
要取得這個IP,可利用下面方式:
local getIP = function()
    local s = socket.connect("www.google.com", 80)--need to have internet connection
    local ip, _ = s:getsockname()
    print( "myIP:", ip)
    text1 = display.newText( "Local IP:"..ip, display.contentCenterX, 40, native.systemFontBold, 24 )
    text1:setFillColor( 1,1,0 )
    return ip
end

getIP()
上面的方式需要在有連網的情形下執行,
它是連到某個開放網站,例如"www.google.com"
當然,你也可以連到其它網站,

因為是取得local IP,有時會希望在沒有連上網路時也能取得這樣的資訊,
此時可使用下面的方式:
local getIP = function()
    local s = socket.udp()  --creates a UDP object
    s:setpeername( "1.1.1.1", 80 )--No need to have internet connection
    local ip, _ = s:getsockname()
    print( "myIP:", ip)
    text1 = display.newText( "Local IP:"..ip, display.contentCenterX, 0, native.systemFontBold, 24 )
    text1:setFillColor( 1,1,0 )
    return ip
end

getIP()
我們建立一個UDP連線,透過這樣的方式來取得自己的IP,
例子中,"1.1.1.1"可以是任何IP,
因為我們並沒有真的要傳送資料,

那...如果要取得真正對外的網路IP呢?
此時我們可利用一些提供這種服務的網站,
例如以下的方式:
function findPublicIPAddress()
    
    local getipScriptURL = "http://myip.dnsomatic.com/"
    local DeviceIP
    
    function ipListener(event)
        if not event.isError and event.response ~= "" then
            DeviceIP = event.response 
            print("Public DeviceIP:"..DeviceIP)
            text1 = display.newText( "Public IP:"..DeviceIP, display.contentCenterX, 80, native.systemFontBold, 24 )
            text1:setFillColor( 0,1,1 )
        end
    end
    
    network.request(getipScriptURL,"GET",ipListener) 
    
end
 
findPublicIPAddress()
當然,上面的例子必須在有連網的情形下執行

沒有留言:

張貼留言