|
|
@@ -6,8 +6,7 @@
|
|
|
local taskName = "TCP_TASK"
|
|
|
local libnet = require "libnet" -- libnet库,支持tcp、udp协议所用的同步阻塞接口
|
|
|
local ip = "112.125.89.8" -- 连接tcp服务器的ip地址
|
|
|
-local port = 45296 -- 连接tcp服务器的端口
|
|
|
-local netCB = nil -- socket服务的回调函数
|
|
|
+local port = 47043 -- 连接tcp服务器的端口
|
|
|
local connect_state = false -- 连接状态 true:已连接 false:未连接
|
|
|
local protocol = false -- 通讯协议 true:UDP协议 false:TCP协议
|
|
|
local ssl = false -- 加密传输 true:加密 false:不加密
|
|
|
@@ -37,23 +36,29 @@ sys.taskInit(function()
|
|
|
sys.publish("net_ready")
|
|
|
end)
|
|
|
|
|
|
+-- 处理未识别的消息
|
|
|
+local function tcp_client_main_cbfunc(msg)
|
|
|
+ log.info("tcp_client_main_cbfunc", msg[1], msg[2], msg[3], msg[4])
|
|
|
+end
|
|
|
+
|
|
|
function TCP_TASK()
|
|
|
-- 打印一下连接的目标ip和端口号
|
|
|
log.info("connect ip: ", ip, "port:", port)
|
|
|
sys.waitUntil("IP_READY") -- 等待联网成功
|
|
|
- netCB = socket.create(nil, taskName) -- 创建socket对象
|
|
|
- socket.debug(netCB, true) -- 打开调试日志
|
|
|
- socket.config(netCB, nil, protocol, ssl) -- 此配置为TCP连接,无SSL加密
|
|
|
+ local socket_client
|
|
|
while true do
|
|
|
+ socket_client = socket.create(nil, taskName) -- 创建socket对象
|
|
|
+ socket.debug(socket_client, true) -- 打开调试日志
|
|
|
+ socket.config(socket_client, nil, protocol, ssl) -- 此配置为TCP连接,无SSL加密
|
|
|
-- 连接服务器,返回是否连接成功
|
|
|
- result = libnet.connect(taskName, 15000, netCB, ip, port)
|
|
|
+ result = libnet.connect(taskName, 15000, socket_client, ip, port)
|
|
|
-- 如果连接成功,则改变连接状态参数,并且随便发一条数据到服务器,看服务器能不能收到
|
|
|
if result then
|
|
|
connect_state = true
|
|
|
- libnet.tx(taskName, 0, netCB, "TCP CONNECT")
|
|
|
+ libnet.tx(taskName, 0, socket_client, "TCP CONNECT")
|
|
|
end
|
|
|
while result do
|
|
|
- succ, param, _, _ = socket.rx(netCB, rx_buff) -- 接收数据
|
|
|
+ succ, param, _, _ = socket.rx(socket_client, rx_buff) -- 接收数据
|
|
|
if not succ then
|
|
|
log.info("服务器断开了", succ, param, ip, port)
|
|
|
break
|
|
|
@@ -64,7 +69,7 @@ function TCP_TASK()
|
|
|
end
|
|
|
if tx_buff:used() > 0 then
|
|
|
log.info("发送到服务器数据,长度", tx_buff:used())
|
|
|
- local result = libnet.tx(taskName, 0, netCB, tx_buff) -- 发送数据
|
|
|
+ local result = libnet.tx(taskName, 0, socket_client, tx_buff) -- 发送数据
|
|
|
if not result then
|
|
|
log.info("发送失败了", result, param)
|
|
|
break
|
|
|
@@ -78,7 +83,7 @@ function TCP_TASK()
|
|
|
if rx_buff:len() > 1024 then
|
|
|
rx_buff:resize(1024)
|
|
|
end
|
|
|
- result, param = libnet.wait(taskName, 15000, netCB)
|
|
|
+ result, param = libnet.wait(taskName, 15000, socket_client)
|
|
|
if not result then
|
|
|
log.info("服务器断开了", result, param)
|
|
|
break
|
|
|
@@ -86,9 +91,11 @@ function TCP_TASK()
|
|
|
end
|
|
|
-- 服务器断开后的行动,由于while true的影响,所以会再次重新执行进行 重新连接。
|
|
|
connect_state = false
|
|
|
- libnet.close(d1Name, 5000, netCB)
|
|
|
+ libnet.close(d1Name, 5000, socket_client)
|
|
|
+ socket.release(socket_client)
|
|
|
tx_buff:clear(0)
|
|
|
rx_buff:clear(0)
|
|
|
+ socket_client=nil
|
|
|
sys.wait(1000)
|
|
|
end
|
|
|
end
|
|
|
@@ -138,6 +145,6 @@ end
|
|
|
|
|
|
|
|
|
-- libnet库依赖于sysplus,所以只能通过sysplus.taskInitEx创建的任务函数中运行
|
|
|
-sysplus.taskInitEx(TCP_TASK, taskName, netCB) --启动tcp task
|
|
|
+sysplus.taskInitEx(TCP_TASK, taskName, tcp_client_main_cbfunc) --启动tcp task
|
|
|
sys.taskInit(test_user_log) -- 启动errdemp测试任务
|
|
|
sys.taskInit(test_error_log)--启动错误函数任务
|