[英]http.createserver and net.createserver in node.js together
[英]node js read specific message from tcp socket net.createServer
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 连接并发送“exit”,然后服务器应该进入“if”循环并说“exit message received”。 这永远不会发生,有人可以解释一下吗? 谢谢
那是因为 data 不是字符串,如果您尝试与 === 进行比较,则会得到 false,因为类型不匹配。 要解决它,您应该将数据对象与简单的 == 进行比较,或者在绑定数据事件之前使用 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");
});
笔记。 如果接收到的数据很大,您应该连接并在其末尾处理消息比较。 检查其他问题以处理这些情况:
我知道这是一篇很老的帖子,当我尝试在这个问题的答案中实现代码时,无论使用了“==”还是 utf8 编码,我都遇到了同样的问题。 我的问题原来是我使用的客户端在退出消息的末尾附加了一个 '\\n' 字符,从而导致服务器上的字符串比较失败。 也许这不是 telnet 等的问题,但 netcat 就是这种情况。 希望这对遇到这篇文章并遇到与我相同问题的其他人有所启发。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.