[英]Node.js client and server game using Telnet
我正在嘗試使用Node.js創建一個基本游戲(只有文本),它是'net'庫。
我打了一堵牆。 我似乎無法弄清楚如何提示用戶輸入一些信息,並等待用戶輸入所述信息。
這是我到目前為止的代碼。 這是相當基本的,當你運行客戶端時會打印出2行,然后掛起。 就在那時,我希望用戶能夠輸入信息。 我不確定這里的一些事情:
1.如何讓用戶輸入? (更具體地說,是客戶端還是服務器端)
2.按Enter鍵時如何將數據發送到服務器?
我已經閱讀了一些關於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.stdin
和process.stdout
與來自/到終端的輸入/輸出進行交互。 看看這里 。 process.stdin.once('data', function(data){ /* ... */ })
按下enter時,可以將數據發送到服務器。 .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');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.