Net模块
在
nodemcu
中Net模块
主要是用于两个或多个开发板之间,开发板与电脑、手机之间的通信。实现它们之间的信息传递。Net模块
中有两种通信传输协议TCP
和UDP
,这两种协议各有优缺点。TCP
:对系统资源要求较多,工作效率没有UDP
高,且每条TCP连接只能进行点对点
的传递,但是它的传输数据的可靠性高,无差错,不丢失,不重复,且按序到达。UDP
:对系统资源要求相对较少,具有较好的实时性,可以进行一对一
,一对多
,多对一
之间的信息传送,但是不能保证数据的可靠性,适用于对高速传输和实时性有较高的通信或广播通信。
本章内容只讲解TCP
协议,通过创建服务器和客户端进行相互通信。
TCP的主要函数
net.createConnection()
功能:创建一个客户端
语法:net.createConnection(type, secur)
参数:type
:模式选择net.TCP
或net.UDP
,默认为net.TCP
secur
:1
——加密模式,0
——普通模式(默认)
示例:
net.createConnection(net.TCP,0)
net.createServer()
功能:创建服务器
语法:net.createServer(type, timeout)
参数:type
:模式选择net.TCP
或net.UDP
,默认为net.TCP
timeout
:TCP服务器
的超时时间1~28'800秒
,默认为30秒
,对于超过30s
不活动的客户端断开连接
示例:
net.createServer(net.TCP, 30)
Net函数的访问接口
接口 | 功能 |
close() | 关闭服务器或客户端 |
listen(port,ip,function(net.socket)) | 从IP地址监听端口 |
getaddr() | 返回服务器本地地址/端口 |
connect(port, ip/domain) | 连接到远程服务器 |
on(event, function()) | 为特定事件注册回调函数 |
send(string, function(sent)) | 向远程对等端发送数据 |
dns(domain, function(net.socket, ip)) | 为主机名提供DNS解析 |
close()
语法:close()
参数:无
返回值:nil
listen()
语法:listen(port,ip,function(net.socket))
参数:port
:端口号,可以省略(随机端口将被选择)ip
:IP地址字符串,可以省略function(net.socket)
:回调函数,如果成功创建连接,则可以传递给调用方函数
返回值:nil
getaddr()
语法:getaddr()
参数:无
返回值: 端口号
,IP
(如果没有侦听,则为nil
,nil
)
connect()
语法:connect(port, ip/domain)
参数:port
:端口号ip/domain
:IP地址
或域名字符串
,如:198.164.164.111
或www.baidu.com
返回值:nil
on()
语法:on(event, function())
参数:event
:事件字符串,可以是connection
(连接)、reconnection
(重新连接)、disconnection
(断开连接)、receive
(接收)或sent
(发送)function()
:回调函数,可以为nil
来删除回调。回调的第一个参数是套接字。如果事件 是“receive
”,则第二个参数是以string
字符串形式接收的数据。如果事件是“disconnection
”或“reconnection
”,则第二个参数是错误代码。
返回值:nil
send()
语法:send(string, function(sent))
参数:string
:发送到服务器或客户端的字符串数据function(sent)
:用于发送字符串的回调函数
返回值:nil
dns()
语法:dns(domain, function(net.socket, ip))
参数:domain
:域名字符串function(net.socket, ip)
:回调函数,第一个参数是套接字,第二个参数是作为字符串的IP地址
返回值:nil
服务器和客户端的程序例程
服务器的程序
sv=net.createServer(net.TCP, 30) --创建一个服务器,客户端连接后30s内没有通信自动断开客户端
sv:listen(80,function(khd) --监听80端口,当有客户端连接后,创建客户端对象“khd”
c:on("receive", function(khd, msg) --当接收到客户端发送过来的消息触发此函数
print(msg) --打印接收到的消息
end)
c:send("hello world") --向客户端发送消息“hello world”
c:close() --断开客户端的连接
end)
客户端的程序
sk=net.createConnection(net.TCP, 0) --创捷一个tcp客户端
sk:connect(80,"IP地址") --连接IP地址和端口80
sk:on("receive", function(sv, c) --当接收到服务器发送过来的消息是触发此函数
print(c) --打印接收到的消息
end )
sk:send("hello world") --向服务器发送数据