2014-03-05 3 views
1

저는 node.js의 초보자이며받는 사람에 따라 다른 답변을 줄 TCP 서버를 만들려고합니다.nodejs와의 데이터 및 문자열 비교

다음은 서버 측 :

var net = require('net'); 

var server = net.createServer(function(c) { 
    console.log('socket opened'); 
    c.setEncoding('utf8'); 
    c.on('end', function() { 
     console.log('connection/socket closed'); 
    }); 
    c.on('data', function(data) { 
     console.log('Data:'+data); 
     if(data.toString() == "open"){ 
      c.write('Answer: opened'); 
     }else if(data.toString() === "add"){ 
      c.write('Answer: added'); 
     }else if(data.toString() === "process"){ 
      c.write('Answer: processed'); 
     } 
    }); 
}); 

server.listen(8080, function() { // start server (port 8080) 
    console.log('server started'); 
}); 

단순히 시도하고 내 코드가 작동하는지 확인 텔넷을 사용합니다. 기본적으로 나는 그에게 'open'을 보내면 서버가 'open'이라고 응답하기를 원합니다. 'add'를 보내면 'added'... 나는 왜 작동하지 않을 지 모르겠다. 나는 이미 한 시간 동안 노력해 왔지만, 내가 만든 간단한 실수 일 것이라고 확신하지만이 간단한 에코 서버가 제대로 작동하지 않는 것을 볼 수는 없다.

답변

13

을하지만, 더 나은 답이있다, 그리고 나는이 비슷한 문제를 인터넷 검색을 발견 : 그래서 당신은 다음과 같이 두 개의 문자열을 비교해야한다. 여기 2 센트입니다.

제대로 방금 trim() 방법

if (data.toString().trim() === 'open') { 
    //... 
} 
1

코드는 OK입니다. 텔넷을 사용하면 ENTER 키를 눌러 문자 메시지를 보냅니다. 서버가받은 텍스트는 '\r\n'으로 끝납니다. 내가 나중에 알고

if (data.toString() === 'open\r\n') { 
    //... 
} 
+4

를 사용한다 (이 하나의 경우에 특정한 만이 아니라 단점) 모든 경우를 잡으려고 ... 그리고 누군가가'netcat'를 사용하고 응용 프로그램 것 break ... 실제로는'data.toString(). replace (/ \ r? \ n $ /, '') === 'open''이되어야합니다. – alex