UIPEthernet TCp Client отправляет данные неправильно, если читает данные одновременно - PullRequest
0 голосов
/ 18 мая 2018

В основном я пытаюсь создать простой TCP-клиент, который может отправлять и получать данные с сервера Node.js с высокой надежностью.

Этот текущий пример связан с простым эхосервером и работает очень хорошо, пока я не раскомментирую нижнюю часть, которая используется для чтения данных, отправленных обратно сервером, после чего отдельные символы строки начинают поступать отдельно от друг друга в случайном порядке.

В настоящее время я использую библиотеку UIPEthernet на Arduino Nano с использованием модуля ENCJ28J60 .

Я провел некоторое тестирование и до сих пор рассматривал следующие решения, но я не знаю, окажет ли какое-либо из них какое-либо влияние:

1: переключиться на библиотеку Ethercard

2: попробуйте другие модули Ethernet (возможно, нано-щит)

3: принять поражение

Вот код Arduino:

#include <UIPEthernet.h>
#include <utility/logging.h>

EthernetClient client;


char data[] = "Hello server! Love, client";
int dlength = sizeof(data) / sizeof(char);

void setup() {
uint8_t mac[6] = {0x3E, 0x03, 0x44, 0x03, 0x22, 0x05};
  Ethernet.begin(mac);

}

void loop(){
if (client.connect(IPAddress(0, 0, 0, 0), 10000)) //Replace with servers IP-address
  {
while(!client){
    ; // wait until there is a client connected to proceed
  }

while (client.connected()) {
      delay(1000);

for (int o = 0; o < dlength-1; o++) {
        client.print(data[o]);
      }
client.println();
     client.flush();
      delay(100);


/*int size; //If uncommented, everything goes haywire 
      while ((size = client.available()) > 0)
      {
        uint8_t* msg = (uint8_t*)malloc(size);
        size = client.read(msg, size);
        Serial.write(msg, size);
        free(msg);
      }*/
      //Ethernet.maintain();
      /*if (Serial.available() > 0) {
        serialFlush();
        reset = true;
        break;
      }*/


}


}
}

А вот код Node.js:

var net = require('net');


var server = net.createServer(function (socket) {
    socket.write('I am an echoserver\r\n');
    socket.on('data', function (data) {
        console.log("Incoming data:");
        console.log(data.toString());
        socket.write(data);
        console.log("And that is all she wrote");
   

    });
    socket.on('error', errorhandler);
});

server.listen(10000);

server.on('listening', function () {
    console.log("Server listening!");

});


server.on('error', errorhandler);






function errorhandler(err) {
    console.log("You have an error!");
    console.log(err);
    console.log("Probably just an unexpected disconnect, carry on...");
}
...