socket编程-java开启socket服务,luci的nixio.socket启动客户端访问

在这里插入图片描述

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# 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值