gpt4 book ai didi

sockets - 从 NodeJS 在 TCP 服务器上实现简单的身份验证

转载 作者:可可西里 更新时间:2023-11-01 02:41:44 28 4
gpt4 key购买 nike

我几乎可以肯定我不了解 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 服务器解决此问题,我真的很愚蠢吗?

提前致谢。

最佳答案

你可以使用 Node ftp server供引用。

您代码中的主要问题:流“数据”事件让您将传入数据分成 block 。例如,如果客户端发出两个 write('username: u\n') 和 write('password: p\n') 你可以期望数据内容是从 'username: u\npassword: p\n' 到 25带有“u”、“s”、“e”、“r”等数据缓冲区的“数据”事件。您需要缓冲传入的 block 或使用状态机。

关于sockets - 从 NodeJS 在 TCP 服务器上实现简单的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6779923/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com