Nodejs Websocket服务器与EP32客户端



我的ESP32客户端代码为,

#include <WiFi.h>
#include <WebSocketClient.h>

const char* ssid     = "###";
const char* password = "###";

char path[] = "/";
char host[] = "192.##.##.##";

WebSocketClient webSocketClient;
WiFiClient client;
void connnect(){
if (client.connect(host, 5000)) {
Serial.println("Connected");
} else {
Serial.println("Connection failed.");
}

webSocketClient.path = path;
webSocketClient.host = host;
if (webSocketClient.handshake(client)) {
Serial.println("Handshake successful");
} else {
Serial.println("Handshake failed.");
}
}
void setup() {
Serial.begin(115200);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

delay(5000);

connnect();

}

void loop() {
String data;

if (client.connected()) {

webSocketClient.sendData("Info to be echoed back");

webSocketClient.getData(data);
if (data.length() > 0) {
Serial.print("Received data: ");
Serial.println(data);
}

} else {
Serial.println("Client disconnected.");
connnect();
}

delay(3000);

}

我的websocket服务器运行在Nodejs是,

var WebSocketServer = require('websocket').server;
var http = require('http');
var server = http.createServer(function(request, response) {
console.log((new Date()) + ' Received request for ' + request.url);
response.writeHead(404);
response.end();
});
server.listen(5000, function() {
console.log((new Date()) + ' Server is listening on port 5000');
});
wsServer = new WebSocketServer({
httpServer: server,
// You should not use autoAcceptConnections for production
// applications, as it defeats all standard cross-origin protection
// facilities built into the protocol and the browser.  You should
// *always* verify the connection's origin and decide whether or not
// to accept it.
autoAcceptConnections: false
});
function originIsAllowed(origin) {
// put logic here to detect whether the specified origin is allowed.
return true;
}
wsServer.on('request', function(request) {
console.log(request)
if (!originIsAllowed(request.origin)) {
// Make sure we only accept requests from an allowed origin
request.reject();
console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
return;
}

var connection = request.accept('echo-protocol', request.origin);
console.log((new Date()) + ' Connection accepted.');
connection.on('message', function(message) {
if (message.type === 'utf8') {
console.log('Received Message: ' + message.utf8Data);
connection.sendUTF(message.utf8Data);
}
else if (message.type === 'binary') {
console.log('Received Binary Message of ' + message.binaryData.length + ' bytes');
connection.sendBytes(message.binaryData);
}
});
connection.on('close', function(reasonCode, description) {
console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
});
});

当我运行这两个代码时,我收到的错误是,

错误:客户端没有请求指定的协议。

我需要的是在nodejs上运行一个websocket服务器,ESP32可以作为客户端连接发送和接收数据。请告诉我我做错了什么,因为上面的代码有不止一个错误。如果有任何简单和更好的建议来编码ESP32和服务器,请建议我。提前感谢

我找到了问题的答案。用request.accept(null, request.origin)代替request.accept('echo-protocol', request.origin)

最新更新