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

我正在尝试使用Node.js创build一个基本的游戏(只有文本),它是'净'的库。
我正在碰壁。 我似乎无法弄清楚如何提示用户input一些信息,并等待用户input这些信息。

这是我到目前为止的代码。 这是相当基本的,当你运行客户端时会打印出2行,然后挂起。 在这一点上,我希望用户能够input信息。 我不确定这里有几件事情:
1.如何让用户input? (更具体地说,是客户端还是服务器端)
2.如何在input按下时将数据发送到服务器?

就Telnet而言,我已经阅读了一些文档,这引出了我的最后一个问题:Node中的Telnet模块是否真的是正确的,还是客户机/服务器创build和通信有更好的select?

客户代码:

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来与terminal的input/输出进行交互。 看看这里 。
  • 使用process.stdin.once('data', function(data){ /* ... */ })input时,可以将数据发送到服务器。 .once方法确保当用户input时只调用一次callback。

客户端代码应该如下所示:

 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'); }); 
Interesting Posts