nodejs简单实现TCP服务器端和客户端的聊天功能示例
本文实例讲述了nodejs简单实现TCP服务器端和客户端的聊天功能。分享给大家供大家参考,具体如下:
服务器端
varnet=require('net'); varserver=net.createServer(); //聚合所有客户端 varsockets=[]; //接受新的客户端连接 server.on('connection',function(socket){ console.log('gotanewconnection'); sockets.push(socket); //从连接中读取数据 socket.on('data',function(data){ console.log('gotdata:',data); //广播数据 //每当一个已连接的用户输入数据,就将这些数据广播给其他所有已连接的用户 sockets.forEach(function(otherSocket){ if(otherSocket!==socket){ otherSocket.write(data); } }); //删除被关闭的连接 socket.on('close',function(){ console.log('connectionclosed'); varindex=sockets.indexOf(socket); sockets.splice(index,1); }); }); }); server.on('error',function(err){ console.log('Servererror:',err.message); }); server.on('close',function(){ console.log('Serverclosed'); }); server.listen(4000);
客户端
varnet=require('net'); varport=4000; varquitting=false; varconn; varretryTimeout=3000;//三秒,定义三秒后重新连接 varretriedTimes=0;//记录重新连接的次数 varmaxRetries=10;//最多重新连接十次 process.stdin.resume();//process.stdin流来接受用户的键盘输入,这个可读流初始化时处于暂停状态,调用流上的resume()方法来恢复流 process.stdin.on('data',function(data){ if(data.toString().trim().toLowerCase()==='quit'){ quitting=true; console.log('quitting'); conn.end(); process.stdin.pause(); }else{ conn.write(data); } }); //连接时设置最多连接十次,并且开启定时器三秒后再连接 (functionconnect(){ functionreconnect(){ if(retriedTimes>=maxRetries){ thrownewError('Maxretrieshavebeenexceeded,Igiveup.'); } retriedTimes+=1; setTimeout(connect,retryTimeout); } conn=net.createConnection(port); conn.on('connect',function(){ retriedTimes=0; console.log('connecttoserver'); }); conn.on('error',function(err){ console.log('Errorinconnection:',err); }); conn.on('close',function(){ if(!quitting){ console.log('connectiongotclosed,willtrytoreconnect'); reconnect(); } }); //打印 conn.pipe(process.stdout,{end:false}); })();
希望本文所述对大家nodejs程序设计有所帮助。