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

我正在发送换行符分隔的文本命令到自定义协议TCP服务器。 在下面的例子中,我发出2个命令,并收到写回的回复。 它在telnet和netcat中按预期工作:

$ nc localhost 1234 command1 command2 theresponse 

与Node.js连接时,相同的工作stream程不起作用:

 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”,但是没有任何东西会被打印出来。 我也尝试执行“连接”callback里面的写入,但我有相同的结果。 奇怪的是,当我在Node REPL中尝试这个function时,它可以工作:

 $ 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 

任何人都有这个奇怪的行为的想法?

谢谢。

斯科特

在没有testing代码的情况下,我假定这是一个咬你的Node.js的asynchronous本质。 在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'); }); 

我在Node.js中完成了一个很好且完全正常工作的Netcat: https : //github.com/roccomuso/netcat

这很容易解决您遇到的问题。 你可以试试看。