如何在 NodeMCU 中为 ESP8266 创建双向 TCP 中继
How to make a bi-way TCP relay in NodeMCU for the ESP8266
我不确定 NodeMCU 是否可以做到这一点,我想在连接到同一网络的两个 ESP8266 设备上打开一个 TCP 端口,从其中一个发送的数据到达另一个。
我试过 net.createServer
和 net.createConnection
,这两个似乎都不起作用,我假设 net.createServer
只是浏览器。
下面的例子只使用一台设备,只是为了测试我是否可以从 putty 发送数据,但我没有得到任何输出..
注意:在启动服务器之前等待 wifi.sta.status() == 5
没有区别。
wifi.setmode(wifi.STATION)
wifi.sta.config(ssid,pwd)
wifi.sta.connect()
wifi.sta.setip({ip=ip,netmask="255.255.255.0",gateway=gateway})
srv=net.createServer(net.TCP)
srv:listen(port,function(conn)
conn:on("receive", function(client,request)
print(request) -- ! never happens
end)
end)
绝对有效。我们前几天在 .
遇到了一些非常相似的事情
server.lua
-- establish connection to AP
...
srv=net.createServer(net.TCP)
srv:listen(5555, function(c)
c:on("receive", function(sck, data)
print("received: " .. data)
sck:send("echo: " .. data)
end)
end)
client.lua
wifi.setmode(wifi.STATION)
wifi.sta.config("test", "password")
wifi.sta.setip({ip="192.168.0.199", netmask="255.255.255.0", gateway="192.168.0.1"})
srv = net.createConnection(net.TCP, 0)
srv:on("receive", function(sck, data) print("received: " .. data) end)
srv:on("connection", function(sck)
sck:send("foo")
end)
srv:connect(5555,"192.168.56")
测试
我先启动服务器然后从命令行发送TCP数据
$ echo "foo" | nc -w1 192.168.0.56 5555
echo: foo
好的,第一次测试成功。然后我在同一子网中的第二个 ESP8266 上启动了客户端。当时两者都连接到各自的 ESPlorer。服务器报告
received: foo
而客户报告
received: echo: foo
请务必在 http://nodemcu.readthedocs.org/en/dev/en/modules/net/ 的 API 文档中查找此简单测试中使用的函数。
我不确定 NodeMCU 是否可以做到这一点,我想在连接到同一网络的两个 ESP8266 设备上打开一个 TCP 端口,从其中一个发送的数据到达另一个。
我试过 net.createServer
和 net.createConnection
,这两个似乎都不起作用,我假设 net.createServer
只是浏览器。
下面的例子只使用一台设备,只是为了测试我是否可以从 putty 发送数据,但我没有得到任何输出..
注意:在启动服务器之前等待 wifi.sta.status() == 5
没有区别。
wifi.setmode(wifi.STATION)
wifi.sta.config(ssid,pwd)
wifi.sta.connect()
wifi.sta.setip({ip=ip,netmask="255.255.255.0",gateway=gateway})
srv=net.createServer(net.TCP)
srv:listen(port,function(conn)
conn:on("receive", function(client,request)
print(request) -- ! never happens
end)
end)
绝对有效。我们前几天在
server.lua
-- establish connection to AP
...
srv=net.createServer(net.TCP)
srv:listen(5555, function(c)
c:on("receive", function(sck, data)
print("received: " .. data)
sck:send("echo: " .. data)
end)
end)
client.lua
wifi.setmode(wifi.STATION)
wifi.sta.config("test", "password")
wifi.sta.setip({ip="192.168.0.199", netmask="255.255.255.0", gateway="192.168.0.1"})
srv = net.createConnection(net.TCP, 0)
srv:on("receive", function(sck, data) print("received: " .. data) end)
srv:on("connection", function(sck)
sck:send("foo")
end)
srv:connect(5555,"192.168.56")
测试
我先启动服务器然后从命令行发送TCP数据
$ echo "foo" | nc -w1 192.168.0.56 5555
echo: foo
好的,第一次测试成功。然后我在同一子网中的第二个 ESP8266 上启动了客户端。当时两者都连接到各自的 ESPlorer。服务器报告
received: foo
而客户报告
received: echo: foo
请务必在 http://nodemcu.readthedocs.org/en/dev/en/modules/net/ 的 API 文档中查找此简单测试中使用的函数。