基于127.0.0.1回环地址实现同一ESP32多Toit应用通信的方案咨询
ESP32 Toit系统上单设备多应用回环通信方案咨询
我找到了一种可在单个ESP32上运行的多个应用之间实现通信的方法,目前已验证可正常运行,不过我对该方案的合理性存在疑问,特来咨询。
我想到存在一个特殊地址127.0.0.1,即loopback(回环)地址,也叫localhost(本地主机)。通常该地址用于在开发者当前使用的同一台计算机上建立IP连接,比如开发客户端-服务端程序时,使用localhost无需额外设备即可在单设备内调试通信协议。
同时,使用回环接口会绕过所有本地网络接口硬件。
我猜测Toit系统也遵循这一原理,便尝试使用该方案通信,结果确实可以正常运行。以下是两个测试应用的代码和并行终端的运行日志,测试时先启动Receiver.toit应用,再运行sender.toit。
测试代码
receiver.toit
import net main : network_interface := net.open serverSocket := network_interface.tcp_listen 1234 print ("Wait...") socket := serverSocket.accept print ("Accept was done...") data := socket.read clientAddr := socket.peer_address.ip.stringify print ("[$clientAddr]->[$data.to_string]") socket.close print ("Socket closed...") serverSocket.close print ("ServerSocket closed...")
sender.toit
import net LOOPBACK := "127.0.0.1" main : network_interface := net.open clientSocket := network_interface.tcp_connect LOOPBACK 1234 print ("Connect...") clientSocket.write "Hello from flatmate..." print ("Write was done...") clientSocket.close print ("Socket closed...")
运行日志
接收端终端输出
micrcx@micrcx-desktop:~/toit_apps/Hsm3/tests$ toit -d=dell run receiver.toit 2021-10-08T06:41:03.937058Z: <process initiated> Wait... Accept was done... [127.0.0.1]->[Hello from flatmate...] Socket closed... ServerSocket closed... 2021-10-08T06:41:35.166388Z: <process terminated - exit code: 0> micrcx@micrcx-desktop:~/toit_apps/Hsm3/tests$
发送端终端输出
micrcx@micrcx-desktop:~/toit_apps/Hsm3/tests$ toit -d=dell run sender.toit 2021-10-08T06:41:34.641365Z: <process initiated> Connect... Write was done... Socket closed... 2021-10-08T06:41:34.917420Z: <process terminated - exit code: 0> micrcx@micrcx-desktop:~/toit_apps/Hsm3/tests$
内容的提问来源于stack exchange,提问作者Michael Kanzieper
相关产品推荐
相关产品推荐

