Запрещенные символы в 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));
    }


    //загружаем код
}

, 👍0

Обсуждение

Что это значит? ... Я не получаю из этого никаких полезных данных .............. чего вы ожидаете от ASCII-кода (0,1,2,3. ..)?, @jsotola


1 ответ


Лучший ответ:

0

Функция 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