如何使用nodejs解析telnet数据

时间:2016-06-20 10:23:03

标签: javascript node.js network-programming

我决定用电子js写一个泥客户端。 Mud是一款基于文本的RPG游戏,使用telnet协议。这是我到目前为止的代码(我刚开始使用nodejs)

socket.pipe(input).on('data'...

目前我的问题是,socket.pipe(input).on('data', function(chunk) { console.log(chunk.toString()); console.log("testing\n\r"); }); 不会在每一行上触发,但会返回多行。有时这些块不会在新的换行符中破坏。

data

上面的代码会给出下面的结果。 ############################################################################# ##[ --- Welcome to Aardwolf MUD --- ]########################## ##[ ]########################## ##[ Players Currently Online: 3 ]########################## ##[ ]########################## ##[ Game Last Rebooted on 06 Jun 18:21:36 ]########################## ############################################################################# ######## ####### ######## ####### ######## ####### ######## _____ _____ ____ _____ ____ ___ ____ _____ ####### ######## |_ _| ____/ ___|_ _| | _ \ / _ \| _ \_ _| ####### ######## | | | _| \___ \ | | | |_) | | | | |_) || | ####### ######## | | | |___ ___) || | | __/| |_| | _ < | | ####### ######## |_| |_____|____/ |_| |_| \___/|_| \_\|_| ####### ######## ####### ######## ####### ######## ####### ## testing ###### ####### ######## ####### ############################################################################# ----------------------------------------------------------------------------- Enter your character name or type 'NEW' to create a new character ----------------------------------------------------------------------------- What be thy name, adventurer? testing 事件被触发2次。

{{1}}

所以我的问题是,我怎么能在每一行/每行上触发事件?我可以分割块,但是如果块没有以换行结束的话,我如何连接不同的块呢?

或许我的方法是100%错误的。这几乎是我的第一个nodejs行。

1 个答案:

答案 0 :(得分:2)

如果有人想知道。解决方案非常简单。我只是走错了道路:

"use strict";

const net = require('net');

const socket = net.createConnection(6555, '198.178.123.109', ()=> {
    process.stdin.pipe(socket);
});

let line = '';

socket.on('data', chunk => {
    let str = chunk.toString();

    for (let i = 0, len = str.length; i < len; i++) {
        let chr = str[i];
        line += chr;

        process.stdout.write(chr);

        if (/[\n\r]$/.test(chr)) {
            process.stdout.write(line);
            line = '';
        }
    }
});