ESP8266和Socket.io的套接字连接

问题描述 投票:0回答:1

我正在将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>
    )
  }
}

有人有什么建议吗?

javascript react-native socket.io arduino esp8266
1个回答
0
投票

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

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

换句话说,socket.io使用基于HTTP的协议,该协议基于TCP的协议。您的代码仅使用TCP,因此仅看到HTTP。它不响应HTTP消息,并且因为您未讲协议而永远不会看到您尝试发送的数据。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.