Node.js客户端和服务器使用Telnet进行游戏

Node.js client and server game using Telnet

本文关键字:Telnet 游戏 js 客户端 服务器 Node      更新时间:2023-09-26

我正在尝试使用Node.js创建一个基本游戏(只有文本),它是"net"库
我碰到了一堵墙。我似乎不知道如何提示用户输入一些信息,并等待用户输入所述信息

这是我目前掌握的代码。它相当基本,在运行客户端时会为您打印出2行,然后挂起。在这一点上,我希望用户能够输入信息。我不确定以下几点:
1.如何让用户键入?(更具体地说,是客户端还是服务器端)
2.按下回车键时,如何将数据发送到服务器

我已经阅读了一些关于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);


提前感谢!

  • 您希望使用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');
});