Luat實現socket tcp通訊

2021-10-21 13:45:48 字數 2602 閱讀 3738

以下**需要在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...