基本上,我正在尝试创建一个简单的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...");
}