カスタムプロトコル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
誰かがこの奇妙な行動についての考えを持っていますか?
ありがとう。
-スコット