使用 TCP 套接字从 Android 设备向 ESP8266 Wi-Fi 芯片发送数据

Sending data to ESP8266 Wi-Fi chip from Android device using TCP sockets

我需要在配置为接入点的 ESP8266 芯片之间发送简单的整数。

我已经通读了这个问题:

但是我不明白如何使用TCP套接字来接收和发送数据,因为ESP8266只能使用AT命令来控制。

有人可以提供深入的解释吗?

来自应用的代码片段:

            Socket client;

            String ip = "192.111.1.1";
            int port = 80;
            int connectTimeout = 20;
            String message = "Test123";

            try{
                client = new Socket();
                client.connect(new InetSocketAddress(ip, port), connectTimeout);

                DataOutputStream DataOut = new DataOutputStream(client.getOutputStream());
                DataOut.writeBytes(message);
                DataOut.flush();

                client.close();

            } catch(UnknownHostException e) {
                e.printStackTrace();
            } catch(IOException e) {
                e.printStackTrace();
            }

你是否应该使用套接字,这取决于正在通信的设备。套接字,即 Berkeley Sockets 是功能强大的计算机的抽象,支持多个 OSI 层上的众多协议(IEEE 802 协议、IP、ICMP、TCP、UDP 等)。

从google看来ESP8266是Arduino的小型扩展板。 Arduino 没有实现套接字,至少开箱即用。一般来说,较小的设备倾向于使用它们自己的 TCP/IP 实现而不是套接字,因为后者过于通用且难以实现。 Arduino 有很多 wifi/ethernet/bluetooth-capable 板,实际上没有人会在一个库中支持它们。

在您的例子中,微控制器通过 AT 命令与 ESP8266 通信。所以这是你唯一的选择。在你的微控制器上使用 AT 命令,使用远程机器上可用的任何东西。如果是计算机,则可以在那里使用套接字。如果只是一样的Arduino+ESP8266,再用AT指令。

并且可能已经为 ESP8266 实现了 TCP,它可能会大大简化事情。否则,如果您的网络中只有两个设备,则第 2 层(没有 IP 和 TCP 的纯 wifi)通信也可以。