【问题标题】:How to manage a NodeJs TCP Client如何管理 NodeJs TCP 客户端
【发布时间】:2020-01-15 03:24:52
【问题描述】:

我正在开发一台带有 Arduino 电机的机器,用于在偏航和俯仰轴上旋转。我也有一个 nodejs 服务器实现来向机器发送数据(坐标列表)。为此,我在 TCP_Client.js 中实现了一个 TCPClient 类,如下所示:

    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);

我将合并到一个名为 coords 的文本变量中的坐标发送如下:

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客户端类有关吗?如果是这样,我该如何解决?

感谢大家的帮助。

【问题讨论】:

    标签: node.js arduino connection tcpclient emit


    【解决方案1】:

    ECONNRESET 表示 TCP 会话的另一端突然关闭了它的连接端。确保它在接收端正确关闭连接。 运行代码时使用--abort-on-uncaught-exception node 选项,它会显示详细报告

    【讨论】:

    • 非常感谢您的回答。您认为处理此类错误的正确方法是什么?我只希望我的服务器在错误发生后仍然存在。
    • 您可以选择调试 Arduino 端代码吗?因为问题似乎是Arduino方面。确保您正确读取数据并正确关闭连接。另外,请告诉我们有关此问题的更多信息。
    猜你喜欢
    • 2013-12-15
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2015-08-15
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多