您的位置:首页 > Web前端 > Node.js

node 练习之多人聊天、点对点聊天室demo

2016-08-17 00:00 141 查看
server端

var net = require('net');
var path = require('path');

var server = net.createServer();

var users = {};
server.on('connection', function (socket) {
socket.on('data', function (data) {
data = JSON.parse(data.toString());
switch (data.prototype) {
case 'register':
if (users[data.username]) {
var send = {
prototype:'register',
code: 1001
}
socket.write(JSON.stringify(send))
} else {
users[data.username] = socket;
var send = {
prototype:'register',
username: data.username,
code: 1000
};
socket.write(JSON.stringify(send))
}
break;
case 'p2p':
if (users[data.to]) {
var send={
prototype:'p2p',
from:data.from,
message:data.message
};
users[data.to].write(JSON.stringify(
3ff0
send));
} else {
var send={
prototype:'public',
from:data.from,
message:data.message
};
for(var k in users){
users[k].write(JSON.stringify(send))
}
}
break;
case 'public':
var send = {
prototype:'public',
from: data.from,
message:data.message
};
for(var k in users){
users[k].write(JSON.stringify(send))
}
break;
default:
;
}
});
socket.on('error', function (err) {
console.log('有客户端退出',err);
})
});
server.listen(3000, function () {
console.log('服务器开启成功');
});

client端

var net=require('net');
var path=require('path');

var client=net.createConnection({
port:3000
});
var username;
client.on('connect',function (){
console.log('请输用户名');
process.stdin.on('data',function (data){
data=data.toString().trim();
if(!username){
var send={
prototype:'register',
username:data
};
client.write(JSON.stringify(send))
} else {
var regex = /(.{1,18}):(.+)/;
var matches=regex.exec(data);
if(matches){
var from=username;
var to=matches[1];
var message=matches[2];
var send={
prototype:'p2p',
from:from,
to:to,
message:message
};
client.write(JSON.stringify(send))
} else {
var from = username;
var message=data;
var send={
prototype :'public',
from:from,
message:message
};
client.write(JSON.stringify(send))
}
}

})
});
client.on('data',function (data){
data=JSON.parse(data.toString());
switch (data.prototype){
case 'register':
if(data.code=='1000'){
console.log('注册成功');
username=data.username;
} else if(data.code=='1001'){
console.log('用户名已存在');
}
break;
case 'public':
console.log(data.from+'说:'+data.message);
break;
case 'p2p':
console.log(data.from+'对你说:'+data.message);
break;
default:;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Node.js