我构建了一个简单的TCP服务器,需要将客户端输入与存储在变量中的硬编码字符串进行比较。
但是,data == username
总是失败。
为什么呢?我该怎么办呢?
示例:
var authenticateClient = function(client) {
client.write("Enter your username:");
var username = "eleeist";
client.on("data", function(data) {
if (data == username) {
client.write("username success");
} else {
client.write("username failure");
}
});
}
var net = require("net");
var server = net.createServer(function(client) {
console.log("Server has started.");
client.on("connect", function() {
console.log("Client has connected.");
client.write("Hello!");
authenticateClient(client);
});
client.on("end", function() {
console.log("Client has disconnected.");
});
}).listen(8124);
答案 0 :(得分:4)
我已经通过客户端实现更新了您的代码。它会起作用。
在'data'事件中,回调将具有Buffer类的实例。所以你必须先转换为字符串。
var HOST = 'localhost';
var PORT = '8124';
var authenticateClient = function(client) {
client.write("Enter your username:");
var username = "eleeist";
client.on("data", function(data) {
console.log('data as buffer: ',data);
data= data.toString('utf-8').trim();
console.log('data as string: ', data);
if (data == username) {
client.write("username success");
} else {
client.write("username failure");
}
});
}
var net = require("net");
var server = net.createServer(function(client) {
console.log("Server has started.");
client.on("connect", function() {
console.log("Client has connected.");
client.write("Hello!");
authenticateClient(client);
});
client.on("end", function() {
console.log("Client has disconnected.");
});
}).listen(PORT);
//CLIENT
console.log('creating client');
var client = new net.Socket();
client.connect (PORT, HOST, function() {
console.log('CONNECTED TO: ' + HOST + ':' + PORT);
client.write('eleeist\n');
});
client.on('data', function(data) {
console.log('DATA: ' + data);
// Close the client socket completely
// client.destroy();
});
client.on('error', function(exception){ console.log('Exception:' , exception); });
client.on('timeout', function() { console.log("timeout!"); });
client.on('close', function() { console.log('Connection closed'); });