美文网首页Luat开源硬件
Luat实例教程:http功能

Luat实例教程:http功能

作者: Luat物联网通信模块 | 来源:发表于2018-03-23 13:27 被阅读31次

    本示例实现的功能是:http功能测试

    1.在编辑工具建立一个test.lua的文件(不一定叫这个名字,用户可以自己随便取名)

    2.设置本文件被全体可见。也就意味着,一旦test被某一文件加载,则test在任何文件中均可被看见,即test中全局变量和函数均可被任何文件调用。

    module(...,package.seeall)
    

    3.test文件头需要 require "xxx" 模块。加载后,就可以调用xxx.lua库文件中的全局变量和函数了

    require"misc"
    require"http"
    require"common"
    

    4.定义print函数,调试用

    local function print(...)
        _G.print("test",...)
    end
    

    5.创建http客户端,并进行连接

    local ADDR,PORT ="36.7.87.100",81
    --测试POST方法时所用地址
    --local ADDR,PORT ="www.luam2m.com",80
    local httpclient
    function http_run()
        --因为http协议必须基于“TCP”协议,所以不必传入PROT参数
        httpclient=http.create(ADDR,PORT)   
        --建立http连接
        connect()   
    end
    

    6.编写connect()函数以及其回调函数

    local function connect()
        httpclient:connect(connectedcb,sckerrcb)
    end
    --SOCKET connected 成功回调函数
    local function connectedcb()
        --GET默认方法
        --设置URL
        httpclient:seturl("/")
        --添加首部,注意Host首部的值与上面的addr,port一致
        httpclient:addhead("Host","36.7.87.100")
        httpclient:addhead("Connection","keep-alive")
        --添加实体内容
        httpclient:setbody("")
        --调用此函数才会发送报文,需要使用POST方式时,将GET改为POST
        httpclient:request("GET",rcvcb)
    end 
    --SOCKET失败回调函数
    local function sckerrcb(r)
        print("sckerrcb",r)
    end
    

    7.编写接收回调函数

    local function rcvcb(result,statuscode,head,body)
        print("resultrcvcb: ",result)  
        print("statuscodercvcb: ",statuscode)
        if  head==nil   then    print("headrcvcb:   nil")
        else
            print("headrcvcb:")
            --遍历打印出所有头部,键为首部名字,键所对应的值为首部的字段值
            for k,v in pairs(head) do       
                print(k..": "..v)
            end
        end
        print("bodyrcvcb:",body)
        httpclient:disconnect(discb)
    end
    

    8.定时器调用run函数运行

    sys.timer_start(http_run,5000)
    

    9.在编辑工具中建立一个名为main.lua的文件。lua脚本的执行从main.lua开始,main.lua是入口文件(注意:main.lua只能有一个)。在main.lua中把test加载进去就好了。sys.init()是对系统初始化,sys.run()是系统主程序。这两句必须有。

    --重要提醒:必须在这个位置定义MODULE_TYPE、PROJECT和VERSION变量
    --MODULE_TYPE:模块型号,目前仅支持Air201、Air202、Air800
    --PROJECT:ascii string类型,可以随便定义,只要不使用,就行
    --VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
    MODULE_TYPE = "Air202"
    PROJECT = "HTTP"
    VERSION = "1.0.0"
    require"sys"
    require"test"
    if MODULE_TYPE=="Air201" then
    require"wdt"
    end
    sys.init(0,0)
    sys.run()
    

    !!!attention

    一个工程只有一个main.lua
    

    相关文章

      网友评论

        本文标题:Luat实例教程:http功能

        本文链接:https://www.haomeiwen.com/subject/wfxxcftx.html