conn.on方法疑问
发布于 11 年前 作者 marsbaiyun 4333 次浏览 最后一次编辑是 8 年前

最近在学习nodejs,是跟着了不起的Node.js这本书走的,在看到书中第六小节“TCP”时有个基于TCP的聊天室的示例,index.js具体代码如下:

var net = require('net');

/**
 * 追踪连接数
 */
var count = 0,
    users = {};

var server = net.createServer(function (conn) {

    conn.setEncoding('utf8');

    //当前连接的昵称
    var nickname;

    conn.write(
        '\n> welcome to \033[92mnode-chat\033[39m!' +
        '\n> ' + count + ' other people are connected at this time.' +
        '\n> please write your name and press enter: ');
    count++;

    conn.on('data', function (data) {

        //删除回车符
        data = data.replace('\r\n','');

        //接收到第一份数据应当是用户输入的昵称
        if (!nickname) {
            if (users[data]) {
                conn.write('\033[93m> nickname already in use. try again:\033[39m ');
                return;
            } else {
                nickname = data;
                users[nickname] = conn;

                for (var i in users) {
                    users[i].write('\033[90m > ' + nickname + ' joinen the room\033[39m\n');
                }
            }
        }

        console.log(data);
    });


    conn.on('close', function () {
        count--;
    });
});

/**
 * 监听
 */
server.listen(3000, function () {
    console.log('\033[96m server listening on *:3000\033[39m');
});

书上的示例效果是在cmd窗口执行node index.js之后,另起一个cmd窗口执行telnet 127.0.0.1 3000,之后在telnet窗口输入信息,服务器端的窗口就会出现相同的信息,书中截图如下所示:

但是,实际的显示效果确实这个样子的:

请问,为什么我的telnet端输入一个字符服务端就输出一个字符,而非与书中显示的输入一串字符结束后服务端才显示同样的字符串啊?是我在conn.on方法中的回调对data处理的方法不对吗?

2 回复

telnet是按字符逐个发送的,也就是不需要按回车就直接发出了。。你可以下载一些socket助手工具来测试 ,不要使用telnet

我是按照书上使用的telnet来做的…我去寻个别的工具试试,谢谢了

回到顶部