流和TCP协议

时间:2014-05-27 13:11:40

标签: javascript node.js tcp

我有一小段代码。我运行它,然后连接到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。

2 个答案:

答案 0 :(得分:2)

TCP是一个数据流,因此您不应该通过调用.read()或收听data事件来对您将收到多少数据做出任何假设。

如果您的输入是换行符分隔,那么您必须缓冲,直到看到换行符。一个块中也可能有多个换行符传递给data事件处理程序。

答案 1 :(得分:1)

我的代码中没有任何问题。您描述的行为与发送每次击键的Telnet客户端有关,它不会等待您按Enter键。如果您使用的是Linux,请尝试使用wget发送数据,然后打开浏览器并输入

http://localhost:3000/hiyou

看看你是否得到一个完整的字符串而不是一个字符。