gpt4 book ai didi

javascript - ESP8266 与 Socket.io 的 Socket 连接

转载 作者:行者123 更新时间:2023-12-02 21:28:23 25 4
gpt4 key购买 nike

我正在使用 React Native 和 socket.io 通过套接字将数据发送到 Arduino。我只是感到困惑,因为我的 arduino 将此字符串打印为输出(而不是“hello world”)

GET /socket.io/?EIO=3&transport=polling&t=N3MDU9z HTTP/1.1
accept: */*
Host: 192.168.1.109
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.12.1

我在 ESP8266 上运行此代码以接收并打印来自客户端的字符串

#include "ESP8266WiFi.h"

const char* ssid = "SSID";
const char* password = "PASSWORD";

WiFiServer wifiServer(80);

void setup() {

Serial.begin(115200);

delay(1000);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting..");
}

Serial.print("Connected to WiFi. IP:");
Serial.println(WiFi.localIP());

wifiServer.begin();
}

void loop() {

WiFiClient client = wifiServer.available();

if (client) {

while (client.connected()) {

while (client.available()>0) {
char c = client.read();
Serial.write(c);
}

delay(10);
}

client.stop();
Serial.println("Client disconnected");

}
}

这是客户端代码(js)

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import io from 'socket.io-client';


export default class App extends React.Component{

constructor(props) {
super(props);
}
componentDidMount() {
const socket = io("http://192.168.1.109:80");
socket.emit("message","hello world");
}

render(){
return(
<View style={styles.container}>
<Text>Hello</Text>
</View>
)
}
}

有人有什么建议吗?

最佳答案

您的 React 代码正在使用 HTTP 协议(protocol)打开与 ESP8266 的连接。

ESP8266 WiFiClient 类是原始 TCP 客户端,而不是 HTTP 服务器。因此,当您打印它收到的内容时,您正在打印 React 代码发送的 HTTP 协议(protocol)行。这就是为什么你会看到你所看到的。

换句话说,socket.io 使用构建在 HTTP 之上的协议(protocol),而 HTTP 又构建在 TCP 之上。您的代码仅使用 TCP,因此它只看到 HTTP。它不会响应 HTTP 消息,也永远不会看到您尝试发送的数据,因为您没有使用该协议(protocol)。

如果您确实想使用 socket.io (为什么?),那么您需要为 ESP8266 找到一个 socket.io 库并使用它。或者您需要自己实现 socket.io 协议(protocol)。有一个here但我不确定它能满足您的需要。

socket.io 是一个不幸命名的软件。在其他计算领域,“套接字”通常指的是原始 TCP 连接;他们选择混淆地重复使用在 TCP 之上构建几层的协议(protocol)的名称。 Linux 下的 TCP“套接字”与 socket.io“套接字”不同。 Linux 下的 TCP“套接字”与 ESP8266 WiFiClient 是一样的(不幸的是,它的命名也是如此,因为它不是特定于 WiFi 的)。

关于javascript - ESP8266 与 Socket.io 的 Socket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60678384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com