我有一小段代码。我运行它,然后连接到Telnet客户端。
var net = require('net');
//create server
var server = net.createServer(function (conn) {
console.log('New connection!')
//Message to the one who connects.
conn.write (
'\n > Welcome to NODE-CHAT!'
+ '\n > ' + count + ' other people are connected at this time.'
+ '\n > Please write your name and press Enter: '
);
//When a connected user writes...
conn.on('data', function (data) {
console.log(data);
});
conn.setEncoding('utf8');
});
//Listen
server.listen(3000, function () {
console.log('Server listening on *:3000');
})
连接后,我按预期收到欢迎消息...然后,如果我在telnet客户端写一些东西,它会立即触发conn.on监听器......让我说我写了#34;你好"控制台中的输出将是:
ħ
我
ý
0
û
我希望这些消息在"完成后发送#34;相反,每当我输入字符。我想我可以将来自conn.on触发器的数据存储在一个字符串中,并在' \ n'字符是键入的。
但我想知道这是否是正确的方法。有没有办法改变触发conn.on的内容?也许所以它只会触发(在这种情况下输出......)某些字符?...即\ n char。
答案 0 :(得分:2)
TCP是一个数据流,因此您不应该通过调用.read()
或收听data
事件来对您将收到多少数据做出任何假设。
如果您的输入是换行符分隔,那么您必须缓冲,直到看到换行符。一个块中也可能有多个换行符传递给data
事件处理程序。
答案 1 :(得分:1)
我的代码中没有任何问题。您描述的行为与发送每次击键的Telnet客户端有关,它不会等待您按Enter键。如果您使用的是Linux,请尝试使用wget发送数据,然后打开浏览器并输入
http://localhost:3000/hiyou
看看你是否得到一个完整的字符串而不是一个字符。