nodejs学习----构建一个简单的TCP聊天服务器

这里给出一个适合初学者的实例:TCP聊天服务器

源码下载地址:http://files.cnblogs.com/joyho/app.zip

 

第一步:实例化服务器,服务器error抛出,记录关闭信息,将服务器绑定到端口4001

var net = require('net');
var server = net.createServer();

server.on('error',function(err){
    console.log('Server error:',err.message);
});

server.on('close',function(){
    console.log('Server closed');

});

server.listen(4001);

 

第二步:接受客户端连接

var net = require('net');
var server = net.createServer();

server.on('connection',function(socket){
    console.log('got a new connection');
});

server.on('error',function(err){
    console.log('Server error:',err.message);
});

server.on('close',function(){
    console.log('Server closed');

});

server.listen(4001);

 

第三步:从连接中读取数据

var net = require('net');
var server = net.createServer();

server.on('connection',function(socket){
    console.log('got a new connection');
    
    socket.on('data',function(data){
        console.log('got data:',data);
     });
});

server.on('error',function(err){
    console.log('Server error:',err.message);
});

server.on('close',function(){
    console.log('Server closed');

});

server.listen(4001);    

 

第四步:聚合所有客户端

var net = require('net');
var server = net.createServer();

var sockets = [];

server.on('connection',function(socket){
    console.log('got a new connection');
   
    sockets.push(socket);
    
    socket.on('data',function(data){
        console.log('got data:',data);
     });
});

server.on('error',function(err){
    console.log('Server error:',err.message);
});

server.on('close',function(){
    console.log('Server closed');

});

server.listen(4001); 

 

第五步:广播数据

var net = require('net');
var server = net.createServer();

var sockets = [];

server.on('connection',function(socket){
    console.log('got a new connection');
   
    sockets.push(socket);
    
    socket.on('data',function(data){
        console.log('got data:',data);

        sockets.forEach(function(otherSocket){
            if(otherSocket != socket){
                otherSocket.write(data);
            }
        });
     });
});

server.on('error',function(err){
    console.log('Server error:',err.message);
});

server.on('close',function(){
    console.log('Server closed');

});

server.listen(4001);

 

第六步:删除被关闭的连接

var net = require('net');
var server = net.createServer();
var sockets = [];

server.on('connection',function(socket){
    console.log('got a new connection');

    sockets.push(socket);

    socket.on('data',function(data){
        console.log('got data:',data);

        sockets.forEach(function(otherSocket){
            if(otherSocket != socket){
                otherSocket.write(data);
            }
        });

    });

    socket.on('close',function(){
        console.log('connection closed');
        var index = sockets.indexOf(socket);
        sockets.splice(index,1);
    });

});

server.on('error',function(err){
    console.log('Server error:',err.message);
});

server.on('close',function(){
    console.log('Server closed');

});

server.listen(4001);

 

第七步:测试运行

1.文件保存为app.js

2.打开cmd窗口,进入app.js所在的目录,输入命令:node app.js  , 回车

3.使用telnet连接服务器:打开cmd窗口,运行telnet localhost 4001命令。(重复该步骤几次,创建多个客户端连接服务器)

4.在步骤3中打开的窗口中任选一个输入随便一串字符,在其他窗口中也能够看到该字符串。

转载于:https://www.cnblogs.com/joyho/articles/3900421.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值