node 练习之多人聊天、点对点聊天室demo
2016-08-17 00:00
141 查看
server端
client端
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:; } });
相关文章推荐
- java WebSocket实现简单的聊天室(包括群发和点对点聊天)
- node.js + socket.io 实现点对点随机匹配聊天
- dwr---服务器反推附demo(实现点对点聊天)
- html5 nodejs&websocket聊天demo
- node.js + socket.io 实现点对点随机匹配聊天
- Node.js学习(六)——websocket组件学习在线聊天室demo
- 基于Node.js + socket.io实现WebSocket的聊天DEMO
- NodeJs+Express3 练习Demo
- SocketChannel_NIO_编程_聊天Demo
- 详解基于java的Socket聊天程序——客户端(附demo)
- 聊天室入门实战(node,sockte.io实现)--第三章(在线成员列表及头像显示,单聊)
- NodeJS+Express+mongoose+Jade+bootstrap+jquery+inspector(调试工具)开发网站demo总结
- 【webRTC】一个基于 tornado 和 webRTC 的点对点视频语音文字聊天室
- JQuery EasyUi练习Demo(带源码)
- 聊天系统Demo,增加文件传送功能(附源码)-- ESFramework 4.0 快速上手(14)
- node.js学习笔记之简洁聊天室
- 视频聊天 Demo
- Java Socket聊天室编程(一)之利用socket实现聊天之消息推送
- netty 点对点聊天程序
- JNA练习DEMO