Net模块

nodemcuNet模块主要是用于两个或多个开发板之间,开发板与电脑、手机之间的通信。实现它们之间的信息传递。
Net模块中有两种通信传输协议TCPUDP,这两种协议各有优缺点。
TCP:对系统资源要求较多,工作效率没有UDP高,且每条TCP连接只能进行点对点的传递,但是它的传输数据的可靠性高,无差错,不丢失,不重复,且按序到达。
UDP:对系统资源要求相对较少,具有较好的实时性,可以进行一对一一对多多对一之间的信息传送,但是不能保证数据的可靠性,适用于对高速传输和实时性有较高的通信或广播通信。

本章内容只讲解TCP协议,通过创建服务器和客户端进行相互通信。

TCP的主要函数

net.createConnection()
功能:创建一个客户端
语法:net.createConnection(type, secur) 参数:
type:模式选择net.TCPnet.UDP,默认为net.TCPsecur1——加密模式,0——普通模式(默认)

示例:

net.createConnection(net.TCP,0)

net.createServer()
功能:创建服务器
语法:net.createServer(type, timeout) 参数:
type:模式选择net.TCPnet.UDP,默认为net.TCPtimeoutTCP服务器的超时时间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(如果没有侦听,则为nilnil)

connect()
语法:connect(port, ip/domain) 参数:
port:端口号
ip/domainIP地址域名字符串,如:198.164.164.111www.baidu.com 返回值:nilon()
语法: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")		--向服务器发送数据