2013-08-07 4 views
5

Node.js를 사용하여 기본 게임 (텍스트 만)을 만들려고하는데 'net'라이브러리입니다.
나는 약간의 벽을 때리고있다. 나는 어떤 정보를 입력하고 사용자가 상기 정보를 입력 할 때까지 기다리는 방법을 알아낼 수 없다.

Node.js 텔넷을 사용하는 클라이언트 및 서버 게임

여기까지의 코드는 다음과 같습니다. 상당히 기본이며 클라이언트를 실행할 때 2 줄을 출력 한 다음 중단됩니다. 그 시점에서 나는 사용자가 정보를 입력 할 수 있기를 원합니다. 여기 몇 가지 확실하지 않습니다.
1. 사용자가 입력 할 수있게하려면 어떻게해야합니까? (구체적으로 클라이언트 또는 서버 측입니까)
2. 엔터를 누르면 서버로 데이터를 보내려면 어떻게해야합니까?

나는 Telnet이가는 한 몇 가지 문서를 읽었으며 마지막 질문을 던졌습니다. Node의 텔넷 모듈이 실제로이 문제에 적합한 지 또는 클라이언트/서버 생성을위한 더 나은 대안이 있습니까? 통신?



클라이언트 코드 :

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 메서드는 사용자가 enter 키를 눌렀을 때 콜백이 한 번만 호출되도록합니다.

클라이언트 코드가 보일 것 같은 :

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'); 
}); 
관련 문제