用Telnet实现Node.js客户端和服务器游戏

5
我正尝试使用Node.js及其“net”库创建一个基本的游戏(只有文本)。 然而我遇到了一些问题。 我似乎无法弄清楚如何提示用户输入一些信息并等待用户输入这些信息。

以下是我目前拥有的代码。 当您运行客户端时,它将为您打印出2行,并且会挂起。 此时,我希望用户能够输入信息。 对于以下几个问题,我不确定:
1. 如何使用户能够输入? (更具体地说,是客户端还是服务器端)
2. 按Enter键后如何将数据发送到服务器?

我已经阅读了一些关于Telnet的文档,这让我想到最后一个问题:Node中的Telnet模块是否真的适合此任务,或者是否有更好的替代方案用于客户端/服务器的创建和通信?

客户端代码如下:
var connect = require('net');

var client = connect.connect('80', 'localhost');
console.log('Connection Success!\n\n');
client.on('data', function(data) {
  // Log the response from the HTTP server.
  console.log('' + data);
}).on('connect', function() {
  // Manually write an HTTP request.
  //I'm assuming I could send data at this point here, on connect?
}).on('end', function() {
  console.log('Disconnected');
});



服务器代码:

var net = require('net');

var sockets = [];

function cleanInput(data) {
    return data.toString().replace(/(\r\n|\n|\r)/gm,"");
}

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

function closeSocket(socket) {
    var i = sockets.indexOf(socket);
    if (i != -1) {
        sockets.splice(i, 1);
    }
}

function newSocket(socket) {
    sockets.push(socket);
    socket.write('Welcome to the Battleship Server!\n\n');
    socket.write('Please enter a username: ');
    socket.on('data', function(data) {
        receiveData(socket, data);
    })
    socket.on('end', function() {
        closeSocket(socket);
    })
}


var server = net.createServer(newSocket);
server.listen(80);


Thanks in advance!

1个回答

6
  • 如果你想要使用process.stdinprocess.stdout与终端进行输入/输出交互,可以参考这里
  • 当用户按下回车键时,可以使用process.stdin.once('data', function(data){ /* ... */ })向服务器发送数据。使用.once方法可以确保回调函数仅在用户按下回车键一次时被调用。

客户端代码应如下所示:

var connect = require('net');

var client = connect.connect('80', 'localhost');
client.on('data', function(data) {
  console.log('' + data);
  process.stdin.once('data', function (chunk) {
    client.write(chunk.toString());
  });
}).on('connect', function() {
  client.write('Hello');
}).on('end', function() {
  console.log('Disconnected');
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接