我正在向自定義協議TCP服務器發出換行符分隔的文本命令。在下面的例子中,我發出2個命令,並收到寫回的回覆。它的工作原理如預期telnet和netcat的:Node.js TCP客戶端的行爲與Netcat/Telnet的行爲不同
$ 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');
我預計運行這個程序後,我會看到「數據:迴應「寫入控制檯,但是,沒有任何事情是打印出來的。我也試着在「連接」回調中執行寫操作,但是我得到了相同的結果。好奇的是,當我嘗試這樣的節點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
任何人有這個古怪的動作的想法?
謝謝。
斯科特
從你的描述,是聽起來像你的TCP服務器有問題,如果兩個或多個命令在一個數據包到達。你能顯示服務器代碼嗎? – stewe
我無法訪問服務器代碼,但我相信你是正確的。服務器可能假設每個到達的「數據」緩衝區都是單個命令。謝謝。 – scttnlsn
我必須缺少一些東西,但是如果它是服務器的錯,爲什麼它在Node.js REPL中工作? –