博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua 服务器与客户端实例(转)
阅读量:5869 次
发布时间:2019-06-19

本文共 2495 字,大约阅读时间需要 8 分钟。

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

服务器,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 .. "\n")
        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 .. ".\n")
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.\n")
Runtime:addEventListener("enterFrame", receiveData)
end
end
end
main()
 

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

http://blog.csdn.net/chunleixiahe/article/details/41683427

你可能感兴趣的文章
ASP.NET MVC+EF5 开发常用代码
查看>>
java语言之创建多个对象
查看>>
"TVB体" 语句
查看>>
利用crontab自动更新SVN代码
查看>>
textarea文本简单样式编辑
查看>>
《转》CXF WebService 开发文档-目录索引
查看>>
生成器
查看>>
C# 程序中嵌入百度地图
查看>>
模板模式
查看>>
css3相关样式
查看>>
New Concept English there (5)
查看>>
BEC listen and translation exercise 43
查看>>
公司 邮件 翻译 培训 长难句 17
查看>>
深入理解javascript作用域系列第二篇——词法作用域和动态作用域
查看>>
9-接口
查看>>
IO-Java实现文件的复制
查看>>
gulp
查看>>
LOJ2430:[POI2014]沙拉餐厅Salad Bar——题解
查看>>
[USACO12DEC]First!
查看>>
Unity3D文件读取
查看>>