【问题标题】:Messaging between apps on the same ESP32同一 ESP32 上的应用程序之间的消息传递
【发布时间】:2021-11-28 04:43:53
【问题描述】:

我想我找到了一种在一个 ESP32 内的应用程序之间进行通信的方法。无论如何,它有效。 确实,我对这种方法的合法性有些怀疑,所以我向您致意。

我记得存在魔术地址“127.0.0.1” - loopback 地址也称为 localhost时间>。在日常生活中,此地址通常用于与程序员使用的同一台计算机建立 IP 连接。例如,如果我正在编写一个客户端-服务器,那么使用 localhost 我可以在一个应用程序中调试交换协议,而无需使用额外的计算机。

同时使用环回接口绕过任何本地网络接口硬件。

而且我认为在您的系统中遵守这一原则的可能性很大,我只需要尝试:如果它有效怎么办?

而且它确实有效。以下是两个应用程序的文本和来自并行终端的屏幕截图。 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$ 

【问题讨论】:

  • 嗯,我在这篇文章中找不到问题。
  • 是的,我对这种方法的合法性有些怀疑,所以我正在向您致意。

标签: localhost tcpclient esp32 tcpserver toit


【解决方案1】:

在一台设备上使用 TCP 连接是一种受支持且应该可以使用的方案。但是,服务器没有防火墙,同一网络上的任何机器都可以连接到运行在 ESP32 上的服务器。

另一种方法是使用本地 pubsub。看看这里的教程:https://docs.toit.io/platform/tutorials/pubsub/pubsubint

Local pubsub 更轻量级和内部化,但它是一种广播机制。发送者只是发送数据,任何正在监听的接收者都会获取数据。如果正确接收每条消息很重要,则需要在顶部实现一个小协议。

未来还将有一种专用机制(目前称为“RPC”)在不同应用程序之间进行有效对话。

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多