2013-01-18 3 views
0

J'essaie d'utiliser REPL sur socket comme une connexion telnet, mais quand j'appuie sur CTRL + C ou CTRL + D, ou une erreur est produite, la connexion socket se bloque et ne répond à rien.node.js REPL sur le socket raccroche lorsque CTRL + C ou CTRL + D est pressé

Le code Node.js est:

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

et d'autre terminal je lance:

telnet localhost 5001 

Quel est le problème?

Répondre

0

Peut-être est un problème de Linux. J'ai essayé Telnet server example with node. Lorsque je cours sur une fenêtre, chaque touche que j'appuie est traitée par la fonction receiveData, mais pas par Linux. En linux est traité ligne par ligne et non caractère par caractère.

Voici le code que j'ai sondé:

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