Javascript Node.js:带有控制序列的远程shell
我正在尝试用Node.js编写一个远程shell。 以下是我目前得到的信息: 客户Javascript Node.js:带有控制序列的远程shell,javascript,node.js,sockets,remote-access,tty,Javascript,Node.js,Sockets,Remote Access,Tty,我正在尝试用Node.js编写一个远程shell。 以下是我目前得到的信息: 客户 var net = require('net'); var client = net.connect({port: 1234}, function(){ process.stdin.pipe(client); client.pipe(process.stdout); }); 服务器 var net = require('net'), spawn = require('child_process
var net = require('net');
var client = net.connect({port: 1234}, function(){
process.stdin.pipe(client);
client.pipe(process.stdout);
});
服务器
var net = require('net'),
spawn = require('child_process').spawn;
var server = net.createServer(function(socket){
var sh = spawn('/bin/sh');
sh.stdout.pipe(socket);
sh.stderr.pipe(socket);
socket.pipe(sh.stdin);
});
server.listen(1234);
它可以很好地处理简单的命令,但当我启动emacs或nano时,它就不能了,因为控制序列没有被发送。
我想让它表现得有点像宋承宪。
这可能吗?可能使用process.stdin.setRawMode(true)
谢谢,我找到了我要找的东西。 它叫pty.js 服务器端:
var net = require('net');
var pty = require('pty.js');
var server = net.createServer();
server.on('connection', function(socket){
var term = pty.spawn('bash', [], {
name: 'xterm-color',
cols: 80,
rows: 40,
cwd: process.env.HOME,
env: process.env
});
socket.pipe(term);
term.pipe(socket);
});
server.listen(1234);
客户端:
var net = require('net');
var client = net.connect(1234);
client.on('connect', function(){
process.stdin.setRawMode(true);
process.stdin.pipe(client);
client.pipe(process.stdout);
});
client.on('end', function(){
console.log('[Connection closed by peer]');
process.stdin.setRawMode(false);
process.exit();
});
目前仅适用于节点v0.10.x。如果希望emacs弹出窗口,则可能需要设置DISPLAY环境变量。真正的问题是如何发送控制序列,如^C、^x、KeyUp、KeyDown。我试过setRawMode(true),它似乎不起作用