Запрещенные символы в TCP/IP
Я пытаюсь отправить данные с моего ESP8266 на TCP-сервер NodeJS, соединение и основные символы (48-90) работают нормально, но если я использую другие, например ASCII-код (0,1,2,3 ...) Я не получаю из этого никаких полезных данных. Итак, я подумал о том, что есть некоторые символы, которые нельзя отправлять по TCP/IP.
Кстати, Я использую это для записи на сервер и работаю со стандартной библиотекой WiFi Client
char arr[255]
for(int i = 0; i < 255; i++){
arr[i] = (char)i;
}
client.print(arr);
Файл Nodejs:
// Загрузите библиотеку TCP
net = require('net');
var mysql = require('mysql');
// Следим за клиентами чата
var clients = [];
var uploadCounter = 0;
initMySQLConnection();
// Запуск TCP-сервера
net.createServer(function (socket) {
// Идентифицируем этого клиента
socket.name = socket.remoteAddress + ":" + socket.remotePort
// Помещаем этого нового клиента в список
clients.push(socket);
// Отправляем приятное приветственное сообщение и объявляем
socket.write("Welcome " + socket.name + "\n");
broadcast(socket.name + " connected\n", socket);
// Обработка входящих сообщений от клиентов.
socket.on('data', function (data) {
broadcast(">> " + data, socket);
uploadData(data);
});
// Удаляем клиента из списка, когда он уходит
socket.on('end', function () {
clients.splice(clients.indexOf(socket), 1);
broadcast(socket.name + " disconnected.\n\n");
});
// Отправляем сообщение всем клиентам
function broadcast(message, sender) {
clients.forEach(function (client) {
// Не хочу отправлять отправителю
if (client === sender) return;
//client.write(сообщение);
});
// Тоже записываем это на вывод сервера
process.stdout.write(message)
}
}).listen(10101);
// Помещаем дружественное сообщение на терминал сервера.
console.log("Chat server running at port 10101\n");
var connection;
function initMySQLConnection() {
connection = mysql.createConnection({
host: "host",
user: "user",
password: "pass",
database: "database"
});
connection.connect(function (err) {
if (err) {
console.log('error when connecting to db:', err);
}
});
connection.on('error', function (err) {
console.log('db error', err);
if (err.code === 'PROTOCOL_CONNECTION_LOST') { // Соединение с сервером MySQL обычно
// потеряно либо из-за перезапуска сервера, либо из-за
} else { // таймаут простоя соединения (the wait_timeout
throw err; // переменная сервера настраивает это)
}
});
setInterval(function () {
connection.query('SELECT 1');
}, 60000);
}
function uploadData(data) {
data = String(data);
console.log("Package Length: " + data.length);
console.log("GOT ASCII CODE: ");
for (var i = 0; i < 255; i++) {
console.log(data.charCodeAt(i));
}
//загружаем код
}
@Ribisl, 👍0
Обсуждение1 ответ
Лучший ответ:
Функция print
принимает массив символов в виде c-строки, оканчивающейся нулем. Он печатает до тех пор, пока не будет получен байт со значением 0. У вас в arr[0]
ноль, поэтому это пустая строка.
Для отправки байтов используется функция write
. Функции print
преобразуют параметры в текст или ожидают, что текст будет представлен массивом символов с нулевым завершением.
В вашем случае это должно быть client.write(arr, length);
где length
— количество байтов, которые вы хотите отправить из буфера, arr
.
теперь я получаю значения от 0 до 127, но все выше — 65533. поэтому ошибка, похоже, в моем файле nodejs, я добавлю ее выше, @Ribisl
Код ASCII только до 127. Почему вы читаете его как строку и символы?, @Juraj
Разве расширенный код ascii не доходит до 255?, @Ribisl
скажите это data.charCodeAt(i) :-), @Juraj
То есть вы имеете в виду без данных = String(data)?, @Ribisl
попробуйте ArrayBuffer, @Juraj
- Несколько клиентских серверов через Wi-Fi
- ESP8266 TCP-соединение WiFiClient проблема
- ESP8266 отправляет TCP HEX-пакет из 4 символов
- Пример класса ESP8266 ASyncTCP
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- ESP8266 — Как получить многоадресный пакет UDP?
- Статический IP-адрес для esp8266 на основе шлюза
- Esp8266-01 AT-команды возвращаются частично
Что это значит? ...
Я не получаю из этого никаких полезных данных
.............. чего вы ожидаете отASCII-кода (0,1,2,3. ..)
?, @jsotola