lua编写的socket通信工具类
root@Openwrt:/usr/lib/lua/luci# cat my-socket-utils.lua
core={}
local h=require "luci.http"
local n=require "nixio"
core.ip="192.168.80.192"
core.port=8080
core.uri="/BYM_ASTEST"
core.method="POST"
core.charset="UTF-8"
core.rcvTimeout=20
function core.get(name)
if name =="" then
renturn ""
else
return string.gsub(h.formvalue(name) or "",'[&<>"]',"")
end
end
function core.httpData(data)
core.uri=string.upper(core.uri)
return core.method.." "..core.uri.." HTTP/1.1\r\n"..
"Host: "..core.ip..":"..core.port.."\r\n"..
"Content-type: text/html;charset="..core.charset.."\r\n"..
"Accept-Language: zh-cn\r\n"..
"User-Agent: Mozilla/4.0(Compatible win32; MSIE)\r\n"..
"Content-Length: "..string.len(data).."\r\n"..
"Connection: close\r\n\r\n"..
data
end
function core.testget(data)
--create a socket instance,domain=inet,type=stream
local socket=nixio.socket("inet","stream")
local ip="192.168.80.192"
local port="8888"
local timeout=20
if not socket then
return false,"create a socket failed!"
end
if not socket:connect(ip,port) then
socket:close()
return false,"connect "..ip..":"..port.."failed!"
end
socket:setopt("socket","rcvtimeo",timeout)
socket:send(core.httpData(data))
repeat
local tmp=socket:recv(100)
if tmp==false then
socket:close()
return false,"response timeout"
end
tmp=tostring(tmp)
local tt={}
local i= #tt
tt[i+1]=tmp
until #tmp < 1
socket:close()
return true,"success 200"
end
function core.send(data)
local position
local t={}
local http
local socket=nixio.socket("inet","stream")
local tmp
if not socket then
return false, "创建socket失败"
end
if not socket:connect(core.ip,core.port) then
socket:close()
return false, "服务无响应,连接服务器"..core.ip..":"..core.port.."失败"
end
socket:setopt("socket","rcvtimeo",core.rcvTimeout)
socket:send(core.httpData(data))
repeat
tmp=socket:recv(100)
if tmp==false then
socket:close()
return false,"响应超时"
end
tmp=tostring(tmp)
t[#t + 1] = tmp
until #tmp < 1
socket:close()
local result=table.concat(t)
position=string.find(result,"\r\n\r\n")
if position==nil then
return false,"返回的数据格式不合法。数据:"..result
end
result=string.sub(result,string.find(result,"\r\n\r\n")+4)
return true,result
end
return core
root@Openwrt:/usr/lib/lua/luci#