在NodeJS的TCP服务器上实现简单的身份validation

我几乎可以肯定,我不明白TCP服务器的基本概念,我不把数据视为stream,更糟糕的是,我可能不会很好地使用这些事件。

我想让tcp服务器写入套接字“username:”,这样你就可以input你的用户名(在像netcat或telnet这样的tcp客户端上),然后tcp服务器必须把下一个数据作为用户名。 到目前为止它确实有效(尽pipe我几乎可以肯定有更好的方法可以做到这一点),接下来它应该写上“password:”,这样你可以input你的密码,如果是正确的,那么应该validation证书和做更多的东西…但是会发生什么,当你input密码,它再次写入“密码:”,因为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'); 

什么是正确的方法来实现这个? 我只是实现这一点,因为我需要接收上传(stream)可能没有结束,并不是一次全部来。 我真的很愚蠢,试图解决这个问题与TCP服务器?

提前致谢。

您可以使用节点ftp服务器源作为参考。

你的代码中的主要问题:stream“数据”事件给你传入的数据拆分成块。 例如,如果客户端发出两个写入('用户名:u \ n')和写入('password:p \ n'),则可以预期数据内容是从'用户名:u \ n密码:p \ n'到25 “数据”事件与“u”,“s”,“e”,“r”等数据缓冲区。 您需要缓冲传入的块或使用状态机。