node js从tcp socket net.createServer读取特定消息

时间:2016-01-27 11:44:04

标签: javascript java node.js sockets

var net = require('net');

var HOST = '0.0.0.0';
var PORT = 5000;

// Create a server instance, and chain the listen function to it
// The function passed to net.createServer() becomes the event handler for the 'connection' event
// The sock object the callback function receives UNIQUE for each connection
net.createServer(function(sock) {

// We have a connection - a socket object is assigned to the connection automatically
console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);

// Add a 'data' event handler to this instance of socket
sock.on('data', function(data) {

    console.log('DATA ' + sock.remoteAddress + ': ' + data);
    // Write the data back to the socket, the client will receive it as data from the server
    if (data === "exit") {
        console.log('exit message received !')
    }

});

// Add a 'close' event handler to this instance of socket
sock.on('close', function(data) {
    console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
});

}).listen(PORT, HOST);

console.log('Server listening on ' + HOST +':'+ PORT);

无论我尝试什么,我都无法得到:

    if (data === "exit") {
        console.log('exit message received !')
    }

工作,总是错误的。

我通过telnet连接并发送"退出",服务器应该进入"如果"循环并说出"退出消息"。这种情况从未发生过,有人可以解雇吗?感谢

2 个答案:

答案 0 :(得分:1)

因为数据不是字符串,如果你尝试与===进行比较,你会得到错误,因为类型不匹配。 要解决这个问题,您应该将数据对象与简单的==进行比较,或者在绑定数据事件之前使用socket.setEncoding(' utf8')。

https://nodejs.org/api/net.html#net_event_data

var net = require('net');
var HOST = '0.0.0.0';
var PORT = 5000;

net.createServer(function(sock) {
    console.log('CONNECTED:',sock.remoteAddress,':',sock.remotePort);
    sock.setEncoding("utf8"); //set data encoding (either 'ascii', 'utf8', or 'base64')
    sock.on('data', function(data) {
        console.log('DATA',sock.remoteAddress,': ',data,typeof data,"===",typeof "exit");
        if(data === "exit") console.log('exit message received !');
    });

}).listen(PORT, HOST, function() {
    console.log("server accepting connections");
});
  

请注意。   如果收到的数据很大,你应该连接并在最后处理消息比较。检查其他问题以处理这些情况:

Node.js net library: getting complete data from 'data' event

答案 1 :(得分:0)

我知道这是一篇很老的文章,当我尝试在此问题的答案中实现代码时,无论使用“ ==”还是utf8编码,我都遇到了相同的问题。对我来说,问题出在我正在使用的客户端在退出消息的末尾附加了一个'\ n'字符,从而导致字符串比较在服务器上失败。也许这不是telnet之类的问题,但是netcat就是这种情况。希望这可以为遇到此帖子并遇到与我相同的问题的其他任何人提供启发。