gpt4 book ai didi

sockets - Node.js TCP 客户端的行为与 Netcat/Telnet 不同

转载 作者:可可西里 更新时间:2023-11-01 02:49:35 25 4
gpt4 key购买 nike

我正在向自定义协议(protocol) TCP 服务器发出以换行符分隔的文本命令。在下面的示例中,我发出了 2 个命令并收到了回写的响应。它在 telnet 和 netcat 中按预期工作:

$ nc localhost 1234
command1
command2
theresponse

与 Node.js 连接时,相同的工作流程无法正常工作:

var net = require('net');
var client = net.connect(1234, 'localhost');

client.on('data', function(data) {
console.log('data:', data.toString());
});

client.on('error', function(err) {
console.log('error:', err.message);
});

client.write('command1\n');
client.write('command2\n');

我希望在运行这个程序后,我会看到“data: theresponse”被写入控制台,但是,什么也没有打印出来。我也尝试在“connect”回调中执行写入,但我得到了相同的结果。奇怪的是,当我在 Node REPL 中尝试这个时......它有效:

$ node
> var net = require('net')
undefined
> var client = net.connect(1234, 'localhost')
undefined
> client.on('data', function(data) { console.log('data:', data.toString()); })
{ ... }
> client.write('command1\n')
true
> client.write('command2\n')
true
> data: theresponse

有人对这种奇怪的行为有想法吗?

谢谢。

-斯科特

最佳答案

在不测试代码的情况下,我假设是 Node.js 的异步特性让您感到厌烦。在 REPL 中,连接发生在您可以输入另一个命令之前。在上面的代码中,您在连接之前编写。

将上面的代码改成这样:

var net = require('net');
var client = net.connect(1234, function(){
client.on('data', function(data) {
console.log('data:', data.toString());
});

client.on('error', function(err) {
console.log('error:', err.message);
});

client.write('command1\n');
client.write('command2\n');
});

关于sockets - Node.js TCP 客户端的行为与 Netcat/Telnet 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725943/

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