0

Telnet 接続のようにソケット経由で REPL を使用しようとしていますが、CTRL + C または CTRL + D を押すか、エラーが発生すると、ソケット接続がハングして何も応答しません。

node.js コードは次のとおりです。

var net = require("net");
var connections = 0;

// Socket port 5001
net.createServer(function (socket) {
  connections += 1;
  var server = require("repl").start(
      'session:' + connections + ' > ', 
      socket
  );
  server.rli.on('exit', function() {
    socket.end();
  });
}).listen(5001);

// Console
var server = require("repl").start('session:' + (++connections) + ' > ', null);

そして、私が実行する他の端末から:

telnet localhost 5001

何が問題ですか?

4

1 に答える 1

0

おそらくLinuxの問題です。

node でTelnetサーバーの例を試しました。ウィンドウで実行すると、押すすべてのキーがreceiveData関数によって処理されますが、Linux では no. Linuxでは、文字ごとではなく、行ごとに処理されます。

これが私が調べたコードです:

var net = require('net');
var sockets = [];

/*
 * Cleans the input of carriage return, newline
 */
function cleanInput(data) {
    return data.toString().replace(/(\r\n|\n|\r)/gm,"");
}

/*
 * Method executed when data is received from a socket
 */
function receiveData(socket, data) {
    var cleanData = cleanInput(data);
    if(cleanData === "@quit") {
        socket.end('Goodbye!\n');
    }
    else {
        for(var i = 0; i<sockets.length; i++) {
            if (sockets[i] !== socket) {
                sockets[i].write(data);
            }
        }
    }
    socket.write('Data: ' + data);
}

/*
 * Method executed when a socket ends
 */
function closeSocket(socket) {
    var i = sockets.indexOf(socket);
    if (i != -1) {
        sockets.splice(i, 1);
    }
}

/*
 * Callback method executed when a new TCP socket is opened.
 */
function newSocket(socket) {
    sockets.push(socket);
    socket.write('Welcome to the Telnet server!\n');
    socket.on('data', function(data) {
        receiveData(socket, data);
    })
    socket.on('end', function() {
        closeSocket(socket);
    })
}

// Create a new server and provide a callback for when a connection occurs
var server = net.createServer(newSocket);

// Listen on port 8888
server.listen(8888);
于 2013-01-20T09:56:02.230 に答える