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

Posted

技术标签:

【中文标题】使用 Telnet 的 Node.js 客户端和服务器游戏【英文标题】:Node.js client and server game using Telnet 【发布时间】:2013-08-08 06:07:54 【问题描述】:

我正在尝试使用 Node.js 创建一个基本游戏(仅文本),它是“网络”库。 我正在碰壁。我似乎无法弄清楚如何提示用户输入一些信息,并等待用户输入所述信息。

这是我到目前为止的代码。这是相当基本的,当您运行客户端时会为您打印 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);

提前致谢!

【问题讨论】:

【参考方案1】: 您想使用process.stdinprocess.stdout 与终端的输入/输出进行交互。看看here。 您可以在使用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');
);

【讨论】:

以上是关于使用 Telnet 的 Node.js 客户端和服务器游戏的主要内容,如果未能解决你的问题,请参考以下文章

Node.js TCP 客户端的行为与 Netcat/Telnet 不同

使用 telnet 的 Node.js 测试服务器 - 设置 Linemode

无法从 Node.js 连接到 Telnet 服务器

Node.js:telnet“石头、纸、剪刀”程序不工作

Node JS REPL、Sockets 和 Telnet - Tab 补全、箭头键等

如何在 Node.js 中与 Net 建立持久连接?