我几乎可以肯定我不理解TCP服务器的基本概念,而且我不会将数据视为流,更糟糕的是,我可能没有很好地使用这些事件。
我希望tcp服务器写入套接字'username:',然后您可以输入您的用户名(在netcat或telnet等tcp客户端上),然后tcp服务器必须将下一个数据视为用户名。到目前为止它确实有效(虽然我几乎可以肯定有更好的方法可以做到这一点),然后它应该写'密码:'所以你可以输入你的密码,如果它是正确的,它应该验证凭据和执行更多操作......但是当您输入密码时,会再次写入“密码:”,因为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服务器解决这个问题,我真的很蠢吗?
提前致谢。
答案 0 :(得分:2)
您可以使用节点ftp server来源作为参考。
代码中的主要问题:stream'data'事件会将传入的数据拆分为块。例如,如果客户端发出两次写入('用户名:u \ n')和写入('密码:p \ n'),您可以预期数据内容可以是“用户名:u \ npassword:p \ n”到25 '数据'事件与'你','s','e','r'等数据缓冲区。您需要缓冲传入的块或使用状态机。