Javascript 插座连接ESP8266和Socket.io

Javascript 插座连接ESP8266和Socket.io,javascript,react-native,socket.io,arduino,esp8266,Javascript,React Native,Socket.io,Arduino,Esp8266,我正在使用React Native with socket.io使用套接字向Arduino发送数据。 我只是感到困惑,因为我的arduino将这个字符串打印为输出(而不是“hello world”) 我在我的ESP8266上运行此代码,以接收和打印来自客户端的字符串 #include "ESP8266WiFi.h" const char* ssid = "SSID"; const char* password = "PASSWORD"; WiFiServer wifiServer(80);

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

我在我的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)

从“React”导入React;
从“react native”导入{样式表、文本、视图};
从“socket.io客户端”导入io;
导出默认类App扩展React.Component{
建造师(道具){
超级(道具);
}
componentDidMount(){
常量套接字=io(“http://192.168.1.109:80");
emit(“message”,“helloworld”);
}
render(){
返回(
你好
)
}
}

有人有什么建议吗?

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

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

换句话说,
socket.io
使用构建在HTTP之上的协议,该协议构建在TCP之上。您的代码只是使用TCP,所以它只是看到HTTP。它不会响应HTTP消息,也不会看到您试图发送的数据,因为您不讲协议

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

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

#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");

  }
}

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>
    )
  }
}