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(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:; } });