zoukankan      html  css  js  c++  java
  • Lua 服务器与客户端实例

    ===============================================================

    服务器,main.lua

    ===============================================================

    local socket = require ( "socket" )

    local tcpServer = nil

    --创建指定端口的tcp server
    local function createTCPServer( port )

        -- Create Socket
        local tcpServerSocket , err = socket.tcp()
        local backlog = 5

        -- Check Socket
        if tcpServerSocket == nil then
            return nil , err
        end

        -- Allow Address Reuse
        tcpServerSocket:setoption( "reuseaddr" , true )

        -- Bind Socket
        local res, err = tcpServerSocket:bind( "*" , port )
        if res == nil then
            return nil , err
        end

        -- Check Connection
        res , err = tcpServerSocket:listen( backlog )
        if res == nil then
            return nil , err
        end

        -- Return Server
        return tcpServerSocket

    end

    --接受来自客户端的连接,并保存在tcpClient
    local tcpClient = nil
    local function acceptClient()
        tcpServer:settimeout( 0 )
        clientIn , _ = tcpServer:accept()
        if clientIn then
            tcpClient = clientIn
        end
    end

    --接收已连接的客户端(tcpClient)数据
    local function receiveLoop()
        if tcpClient ~= nil then
            local tcpClientMessage , _ = tcpClient:receive('*l')

            if ( tcpClientMessage ~= nil ) then
                print(tcpClientMessage)
                tcpClient:send( "back:" .. tcpClientMessage .. " ")
            end
        end
    end

    local function main()
        tcpServer , _ = createTCPServer( 8080 )
        if tcpServer then
            Runtime:addEventListener( "enterFrame" , acceptClient )
            Runtime:addEventListener( "enterFrame" , receiveLoop )
        end
    end

    main()
     

    ===============================================================

    客户端程序,main.lua

    ===============================================================

    local ui = require("ui")
    local socket = require("socket")
    local tcpClient = nil

    --接收来自服务器的数据
    local function receiveData()
    if tcpClient then
    tcpClient:settimeout(0)
    local msg = tcpClient:receive("*l")
    if msg then
    print(msg)
    end
    end
    end

    --向服务器发送数据
    local index = 0
    local function btnListener(event)
    index = index + 1
    if tcpClient then
    tcpClient:send("pack index:" .. index .. ". ")
    end
    end

    --初始化
    local function main()
    local btn = ui.newButton{
    default = "buttonBlue.png",
    over = "buttonBlueOver.png",
    onRelease = btnListener,
    id = "btn"
    }
    btn:setReferencePoint(display.TopLeftReferencePoint)
    btn.x = 10
    btn.y = 100

    --创建tcp连接
    tcpClient = socket.tcp()
    if tcpClient then
    local ret = tcpClient:connect("192.168.1.2", 8080)
    if ret then
    tcpClient:send("hi, server, i'm client. ")
    Runtime:addEventListener("enterFrame", receiveData)
    end
    end
    end

    main()
     

    lua socket相关文档参见:http://w3.impa.br/~diego/software/luasocket/tcp.html

  • 相关阅读:
    使用spring AOP获得session的思路
    Oracle相关操作示例(导出导入dmp需要采用)
    sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
    Java之旅hibernate(8)——基本关系映射
    进一步优化SPA的首屏打开速度(模块化与懒载入) by 嗡
    Codeforces461A Appleman and Toastman 贪心
    程序猿,一个吃青春饭的行业
    The 14th UESTC Programming Contest Final B
    我开发的“小灵”,自觉得比微软“小冰”好多了
    windows下安装配置apacheserver
  • 原文地址:https://www.cnblogs.com/xiyushimei/p/8597006.html
Copyright © 2011-2022 走看看