【发布时间】:2012-03-28 07:23:49
【问题描述】:
我几乎可以肯定我不了解 TCP 服务器的基本概念,并且我没有将数据视为流,更糟糕的是,我可能无法很好地使用事件。
我希望 tcp 服务器写入套接字“用户名:”,这样您就可以输入您的用户名(在像 netcat 或 telnet 这样的 tcp 客户端上),然后 tcp 服务器必须将下一个数据视为用户名。到目前为止它确实有效(尽管我几乎可以肯定有更好的方法来做到这一点),接下来它应该写 'password:' 这样你就可以输入你的密码,如果它是正确的,那么它应该验证凭据并做更多的事情...但是发生的情况是,当您输入密码时,它会再次写入“密码:”,因为socket.write('password: ');本身就在另一个socket.on('data',function(){//etc});中
这是我目前的代码:
var net = require('net');
var server = net.createServer(function (socket) {
socket.addListener("connect", function () {
socket.write('username: ');
socket.on('data',function(data){
var username = data.toString().replace('\n','');
socket.write('password: ');
socket.on('data',function(data){
var password = data.toString().replace('\n','');
// verify authentication here
// Do more stuff
});
});
});
});
server.listen('8000','localhost');
实现这个的正确方法是什么?我之所以这样做,是因为我需要接收可能没有结尾且不会一下子出现的上传(流)。试图用 TCP 服务器解决这个问题,我真的很愚蠢吗?
提前致谢。
【问题讨论】:
-
只是一个快速的答案:尝试 .once 或 .one 而不是 on,这应该只会触发每个回调一次。给出的答案也是正确的,并且是一个更完整的解决方案。
标签: sockets authentication node.js tcp