2013-08-07 34 views
5

Tôi đang cố tạo trò chơi cơ bản (chỉ văn bản) bằng Node.js và thư viện 'net'.
Tôi đang đánh một bức tường. Tôi không thể tìm ra cách để nhắc người dùng nhập một số thông tin và chờ người dùng nhập thông tin đã nói.

Trò chơi máy khách và máy chủ Node.js bằng Telnet

Đây là mã tôi có cho đến thời điểm này. Nó khá cơ bản, và sẽ in ra 2 dòng cho bạn khi bạn chạy máy khách, và sau đó treo. Vào thời điểm đó, tôi muốn người dùng có thể nhập thông tin. Tôi không chắc chắn về một số điều ở đây:
1. Làm cách nào để cho phép người dùng nhập? (cụ thể hơn, là phía máy khách hoặc phía máy chủ)
2. Làm cách nào để gửi dữ liệu đó đến máy chủ khi nhấn được nhập?

Tôi đã đọc một số tài liệu về Telnet, và nó dẫn tôi đến câu hỏi cuối cùng của tôi: là mô-đun Telnet trong Node thực sự thích hợp cho việc này, hoặc có cách thay thế tốt hơn cho việc tạo máy khách/máy chủ và giao tiếp? Mã



Chủ đầu tư:

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



server Code:

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); 


Cảm ơn trước!

Trả lời

5
  • bạn muốn sử dụng process.stdinprocess.stdout để tương tác với đầu vào/đầu ra từ/đến thiết bị đầu cuối. Có một cái nhìn here.
  • Bạn có thể gửi dữ liệu đến máy chủ khi nhập được nhấn với process.stdin.once('data', function(data){ /* ... */ }). Phương thức .once đảm bảo rằng cuộc gọi lại chỉ được gọi một lần khi người dùng truy cập vào.

Mã khách hàng nên xem xét như:

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'); 
}); 
Các vấn đề liên quan