node搭建简单的TCP通讯系统

//模块依赖
var net = require("net");
var count = 0;
var chunk = "";
var user = {};//记录所有用户的信息
var server = net.createServer(function (conn) {
    conn.write('>Welcome to \033[96m node-chat\033[39m!'
        + '\n>' + count + ' other people are connected at this time.'
        + '\n> please write your name and press enter:'
    );
    count++;
    console.log("\033[90m   new connection!\033[39m");
    var nickname;
    conn.on("close", function () {
        broadcast('\033[90m' + nickname + 'left the room\033[39m');
        count--;
    });
    conn.on("data", function (data) {//监听输入,用chunk储存输入的值,不然会输入一个,服务器 
                                     //马上输出一个
        //data = data.replace('\r\n', '');
        if (data != '\r\n') {
            chunk += data;
        } else {
            console.log('\n' + chunk);
            if (!nickname) {
                if (user[chunk]) {
                    conn.write('\033[93m> nickname allready in use,try again:\033[39m');
                    chunk = "";
                    return;
                } else {
                    nickname = chunk;
                    user[nickname] = conn;
                    for (var i in user) {
                        if (i != nickname) {
                            broadcast('\033[90m' + nickname + ' joined the room\033[39m');
                        }
                        //user[i].write('\n\033[90m' + nickname + ' joined the room\033[39m\n');
                    }
                }
            }
            //否则认为是聊天信息
            else {
                for (var i in user) {
                    if (i != nickname) {
                        user[i].write(nickname + ":" + chunk + '\n');
                    }
                }
            }
            chunk = "";
        }
    });
    conn.on("close", function () {
        count--;
        delete user[nickname];
    })
    conn.setEncoding("utf8");
})
server.listen(3000, function () {
    console.log("\033[96m   Server listening on *:3000\033[39m");
})
function broadcast(msg, exceptmyself) {
    for (var i in user) {
        if (!exceptmyself || i != nickname) {
            user[i].write(msg);
        }
    }
}

服务器端:node index.js

客户端:telnet 127.0.0.1 3000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值