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 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!');
或者是
相关文章推荐
- Node.js权威指南 (7) - 实现基于TCP与UDP的数据通信
- Node.js与网络:Node.js对TCP、UDP、Socket、HTTP等协议的实现和支持
- Node.js实现基于TCP与UDP的数据通信
- 教你编写 Node.js 中间件,实现服务端缓存(附demo源码)
- nodejs express实现 客户端+服务端
- Node.js TCP服务端
- 游戏任务成就体系的实现(五):通讯模块(MsgUtil)基于NodeJS+TCP的机制的实现
- C++对比Node.js实现Socket Server 服务端代码
- 教你编写 Node.js 中间件,实现服务端缓存(附demo源码)
- Node.js与网络:Node.js对TCP、UDP、Socket、HTTP等协议的实现和支持
- 终于解决:在客户端和服务端都用dojo Loader来实现异步加载后,Node.js的全局变量__dirname无法使用
- node.js在服务端实现简单的验证码--captchapng
- 在Node.js中使用TCP套接字编程
- node.js---study2 连接池连接数据库实现登录注册查询用户的功能---
- Node.js实现301、302重定向服务
- node.js 实现一个简单的登录拦截器
- socket实现tcp/ip服务端源码,无线程
- node.js中实现kindEditor图片上传功能的方法教程
- nodejs+socketio+redis实现前端消息实时推送
- Node.js巧妙实现Web应用代码热更新