2013-08-07 127 views
5

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

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

这里是我到目前为止的代码。这是相当基础的,当你运行客户端时会为你打印两行,然后挂起。正是在这一点上,我希望用户能够输入信息。我不确定这里有几件事:
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); 


提前感谢!

回答

5
  • 要使用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'); 
}); 
相关问题