TCP-клиент получает данные целиком в TCP-клиенте node.js - PullRequest
0 голосов
/ 21 марта 2020

Я отправлял данные с сервера Arduino моему клиенту node.js, когда я их получаю, я не получаю их как целую строку, а вместо этого в виде символов, в своей консоли я получаю что-то вроде

Получено: h Получено: e Получено: l Получено: l Получено: o

Вместо получения
Получено: 'привет'

Любая помощь, пожалуйста

Ниже мой node.js клиент получения данных и мой Arduino, отправляющий данные

client.on('data', function(data) {
    console.log('Received: ' + data);
});
 // listen for incoming clients
      EthernetClient clientA = serverA.available();
      if (clientA) {
          Serial.println("Client A connected.");

          while(clientA.available() > 0) {
              char dataA = clientA.read(); // 
              Serial.print(dataA);
              //clientA.write(dataA); // echo
              serverB.write(dataA); // forward
          }
      }

Клиент A - это еще один node.js клиент, отправляющий это Arduino и Arduino для повторной отправки данных.

1 Ответ

0 голосов
/ 22 марта 2020

Проблема в том, что вы читаете символ за символом:

    char dataA = clientA.read(); // 
    Serial.print(dataA);

Вы можете сделать все oop, поместить все полученные символы в буфер и затем запустить очистку / печать буфера. Некоторые псевдокод tpo помогут вам начать:

    char dataA;
    char buffer [32] = '\0'; // Buffer for 31 chars and the null terminator
    uint8_t i = 0;        
    while(clientA.available() > 0) {
          dataA = clientA.read();  
          buffer [i] = dataA; // we put the char into the buffer
         if (dataA != '/0') i++; // put the "pointer" to the next space in buffer
         else {               
          Serial.print(buffer);

         ... do something else with the buffer ....

          }
        }

Прочитайте о концепциях последовательной связи и научитесь их использовать Asa Starter:
https://www.oreilly.com/library/view/arduino-cookbook/9781449399368/ch04.html

...