以下**需要在luat通訊模組中使用
建立連線後無法主動關閉,只能靠斷網關閉或者伺服器端關閉
-- 模組功能:tcp連線,報文收發
-- @需要使用合宙官方lib
-- @作者 wangjiaw [email protected]
-- @版本 20210309
-- @修改記錄1 20210309
require "socket"
module
(...
, package.seeall)
-- 函式功能:建立tcp任務,實現tcp連線,報文收發
-- @傳入引數:伺服器ip,埠,tcp報文傳送佇列,tcp報文接收佇列
-- @需要傳送的資料只需要插入傳送佇列即可,該任務會每秒檢查佇列並把佇列中的資料傳送一條出去
function
sockettcptaskon
(ip, port, tcp_send_queue, tcp_recv_queue)
local tcp_client
sys.
taskinit
(function()
while
not socket.
isready()
do sys.
wait
(2000
)end
tcp_client = socket.
tcp(
)while
not tcp_client:
connect
(ip, port)
do sys.
wait
(2000
)end
sys.
publish
("tcp_connect_ok"
)--可以依據此處判斷連線是否超時
local r, s, p
while
true
do log.
info
("socket tcp send queue len"
,#tcp_send_queue)
log.
info
("socket tcp recv queue len"
,#tcp_recv_queue)
if#tcp_send_queue >
0then
--檢查全域性變數tcp傳送佇列,如果有資料就發出去
if tcp_client:
send
(tcp_send_queue[1]
)then
log.
info
("tcp send ok"
) table.
remove
(tcp_send_queue,1)
else
log.
info
("tcp send false"
)--tcp報文傳送失敗
sys.
publish
("tcp_connect_false"
)break
endend
r, s, p = tcp_client:
recv
(1000
,"pub_msg"
)--此處阻塞
if r then
--收到伺服器傳送的訊息
log.
info
("tcp recv ok"
, s)
table.
insert
(tcp_recv_queue, s)
--放入全域性變數tcp接收佇列
elseif s ==
"pub_msg"
then
log.
info
("這是收到了訂閱的訊息和引數顯示:"
, s, p)
elseif s ==
"timeout"
then
log.
info
("tcp recv timeout"
)--可以在此處傳送心跳包
else
log.
info
("tcp connect false"
) sys.
publish
("tcp_connect_false"
)break
endend
log.
info
("tcp close"
) tcp_client:
close()
end)
end-- 使用例程,不用或者不在此處執行時請注釋掉
local send_queue, recv_queue =
,sockettcptaskon
("180.97.81.180"
,"52631"
, send_queue, recv_queue)
table.
insert
(send_queue,
"tcp hello"
)--傳送資料
使用socket tcp實現通訊
一 伺服器端 include include 需要引入ws2 32.lib動態鏈結庫 void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 socket socksrv socket af inet,sock stream,...
Luat開發簡介
luat lua at,luat推出的物聯網開源架構,依託於通訊模組做簡易快捷的開發,將傳統的at命令用lua語言封裝成api,並提供各種功能應用的demo,大大減少使用者的開發成本。開發者可以通過呼叫api輕鬆,便捷的實現tts gps socket mqtt ota等功能。例如下面通過幾行 既可...
socket(TCP)通訊之Python實現
1 service address localhost 9102 af inet ipv4 sock stream tcp s socket.socket socket.af inet,socket.sock stream 監聽 ip port s.bind address 最大允許連線數量 s.l...