2013-01-18 56 views
0

我试图在套接字上使用REPL,如telnet连接,但是当我按下CTRL + C或CTRL + D或错误产生时,套接字连接挂起并且不响应任何事情。node.js当按CTRL + C或CTRL + D时,套接字上的REPL挂起

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 

问题是什么?

回答

0

也许是一个linux问题。我试过Telnet server example with node。 当我在窗口上运行时,我按下的每个按键都被receiveData函数处理,但是在linux没有。 在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);