В основном я пытаюсь создать простой 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...");
}