Node.js 如何管理NodeJs TCP客户端
我在一台装有Arduino电机的机器上工作,用于在偏航和俯仰轴上旋转。我还有一个nodejs服务器实现,用于向机器发送数据(坐标列表)。为此,我在TCP_Client.js中实现了一个TCPClient类,如下所示:Node.js 如何管理NodeJs TCP客户端,node.js,arduino,connection,tcpclient,emit,Node.js,Arduino,Connection,Tcpclient,Emit,我在一台装有Arduino电机的机器上工作,用于在偏航和俯仰轴上旋转。我还有一个nodejs服务器实现,用于向机器发送数据(坐标列表)。为此,我在TCP_Client.js中实现了一个TCPClient类,如下所示: var net = require('net'); /*************************************************************************************************************
var net = require('net');
/***********************************************************************************************************************
---------------------------------------------------Client TCP socket----------------------------------------------------
* *********************************************************************************************************************/
const port = 5303;
const host = 'localhost';
// creating a custom socket client and connecting it....
var client;
class TCPClient {
constructor(host, port) {
this.host = host;
this.port = port;
client = new net.Socket();
client.connect({
port: this.port,
host: this.host
});
this.onConnect();
}
onConnect() {
client.on('connect',function(){
console.log('Client: connection established with server');
console.log('---------client details -----------------');
var address = client.address();
var port = address.port;
var family = address.family;
var ipaddr = address.address;
console.log('Client is listening at port' + port);
console.log('Client ip :' + ipaddr);
console.log('Client is IP4/IP6 : ' + family);
});
client.on('drain', function(){
console.log("DRAIN");
});
this.setEncoding();
client.on('data', function(data) {
console.log("RECEIVED");
client.end();
});
client.on('end', function(){
console.log("END");
});
}
setEncoding() {
console.log("setEncoding");
client.setEncoding('utf8');
}
onData(data) {
console.log("DATA= ", data);
client.write(data);
}
end() {
client.end();
}
close() {
client.close();
}
}
//CREATE A TCP CLIENT OBJECT
exports.newTCPclient = function (host, port) {
console.log("CONSTRUCT TCP CLIENT");
var tc = new TCPClient(host, port);
return tc;
}
在server.js中,我初始化了一个全局TCPClient,如下所示:
const port = 5033;
const host = '192.168.100.20';
var tcp_client = tcpclient.newTCPclient(host, port);
tcp_client.onData(coords);
我将坐标合并到一个名为coords的文本变量中,如下所示:
const port = 5033;
const host = '192.168.100.20';
var tcp_client = tcpclient.newTCPclient(host, port);
tcp_client.onData(coords);
每次移动arduino电机时,我都会重复此操作,但过了一会儿,我就会遇到以下错误:
events.js:174
throw er; //Unhandled 'error' event
Error: read ECONNRESET
at TCP.onStreamRead(internal/stream_base_commons.js:111:27)
Emitted 'error' event at:
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process. tckCallback (internal/process/next_tick.js:63:19)
我的人际关系不是很流利。它与TCP客户机类相关吗?如果是这样的话,我如何修复它
谢谢您的帮助。
ECONNRESET
表示TCP会话的另一端突然关闭了其连接端。确保它在接收端正确关闭连接。
运行代码时,使用
--abort on uncaught exception
节点选项,它将显示详细的报告非常感谢您的回答。你认为处理这种错误的正确方法是什么?我只希望我的服务器在发生错误后仍处于活动状态。您是否可以选择调试Arduino端代码?因为问题似乎出在Arduino方面。确保正确读取数据并正确关闭连接。另外,请告诉我们更多关于这个问题的信息。