您的位置:首页 > 理论基础 > 计算机网络

node.js tcp服务端实现

2013-07-17 21:11 246 查看
var net = require('net');
var listenPort = 8990;//监听端口

var _room = new Object();
_room.users = new Array();

var server = net.createServer(function(socket){
// 我们获得一个连接 - 该连接自动关联一个socket对象
console.log('connect: ' + socket.remoteAddress + ':' + socket.remotePort);

var user = new Object();
user.conn = socket;
user.conn.name = socket.remoteAddress + ':' + socket.remotePort;
_room.users.push(user);

//接收到数据
socket.on('data',function(data){

for(var i = 0; i < _room.users.length; i++){
//if(user !== _room.users[i]){
_room.users[i].conn.write('\n' + _room.users[i].conn.name + ':\n ' + data);
//}
}

});

//数据错误事件
socket.on('error',function(exception){
console.log('socket error:' + exception);
socket.end();
});

//客户端关闭事件
socket.on('close',function(){

var index = -1;
for(var i=0,length = _room.users.length;i<length;i++){//遍历容器中所有的用户
if(user == _room.users[i]){
index = i;
}else{
_room.users[i].conn.write('\n' + _room.users[i].conn.name + ' has left!\n');
}
}

if(index != -1){
_room.users.splice(index, 1);
}

});

}).listen(listenPort);

//服务器监听事件
server.on('listening',function(){
console.log("server listening:" + server.address().port);
});

//服务器错误事件
server.on("error",function(exception){
console.log("server error:" + exception);
});

由于很菜,暂时就实现成这样,请见谅
客户端暂用网络调试助手NetAssist

var net = require('net');//加载net模块包含了node需要的所有TCP功能
var chatServer = net.createServer();//创建一个新的服务器
var clientList = [];//定义一个存放多个用户的容器

chatServer.on('connection',function(client){//调用on方法添加一个事件监听器

client.write('Welcome To ChatRoom\n');//通过client,可以将信息发送给客户端

client.name = client.remoteAddress + ':' + client.remotePort;
client.write('Hi ' + client.name + '!\n');

clientList.push(client);//将登入的用户推入容器中

for(var i=0,length = clientList.length;i<length;i++){//遍历容器中所有的用户
if(client !== clientList[i]){
clientList[i].write('\nWelcome:' + client.name + '\n');
}
}

client.on('data',function(data){//监听client,如果发现client发送数据给服务器时,这一事件就会被触发
for(var i=0,length = clientList.length;i<length;i++){//遍历容器中所有的用户
//if(client !== clientList[i]){
clientList[i].write('\n' + client.name + ':\n  ' + data);
//}
}
});

client.on('close', function(){

var index = -1;
for(var i=0,length = clientList.length;i<length;i++){//遍历容器中所有的用户
if(client == clientList[i]){
index = i;
}else{
clientList[i].write('\n' + client.name + ' has left!\n');
}
}

if(index != -1){
clientList.splice(index, 1);
}

});
});

chatServer.listen(9000);//让node知道是监听哪个端口
console.log('ChatRoom started!');


或者是
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: