2013-08-07 130 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'); 
}); 
相關問題