如果同时读取数据,UIPEthernet TCp Client会错误地发送数据

时间:2018-05-17 21:49:59

标签: node.js tcp arduino ethernet

基本上,我正在尝试创建一个简单的TCP客户端,它可以高度可靠地从Node.js服务器发送和接收数据。

这个当前的例子连接到一个简单的回声器并且它工作得非常好,直到我取消注释用于读取服务器发回的数据的底部部分,此时字符串的各个字符开始单独到达彼此以随机方式。

我目前正在使用UIPEthernet library在Arduino Nano上运行ENCJ28J60 module

我已经做了一些测试,到目前为止我已经考虑了以下解决方案,但我不知道它们中是否会有任何影响:

1:切换到Ethercard库

2:尝试不同的以太网模块(可能是Nano屏蔽)

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...");
}

0 个答案:

没有答案