欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

nodejs简单实现TCP服务器端和客户端的聊天功能示例

程序员文章站 2022-08-10 09:16:01
本文实例讲述了nodejs简单实现tcp服务器端和客户端的聊天功能。分享给大家供大家参考,具体如下: 服务器端 var net = require('net')...

本文实例讲述了nodejs简单实现tcp服务器端和客户端的聊天功能。分享给大家供大家参考,具体如下:

服务器端

var net = require('net');
var server = net.createserver();
//聚合所有客户端
var sockets = [];
//接受新的客户端连接
server.on('connection', function(socket){
  console.log('got a new connection');
  sockets.push(socket);
  //从连接中读取数据
  socket.on('data', function(data){
    console.log('got data:', data);
    //广播数据
    //每当一个已连接的用户输入数据,就将这些数据广播给其他所有已连接的用户
    sockets.foreach(function(othersocket){
      if (othersocket !== socket){
        othersocket.write(data);
      }
    });
    //删除被关闭的连接
    socket.on('close', function(){
      console.log('connection closed');
      var index = sockets.indexof(socket);
      sockets.splice(index, 1);
    });
  });
});
server.on('error', function(err){
  console.log('server error:', err.message);
});
server.on('close', function(){
  console.log('server closed');
});
server.listen(4000);

客户端

var net = require('net');
var port = 4000;
var quitting = false;
var conn;
var retrytimeout = 3000;  //三秒,定义三秒后重新连接
var retriedtimes = 0;  //记录重新连接的次数
var maxretries = 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);
  }
});
//连接时设置最多连接十次,并且开启定时器三秒后再连接
(function connect() {
  function reconnect() {
    if (retriedtimes >= maxretries) {
      throw new error('max retries have been exceeded, i give up.');
    }
    retriedtimes +=1;
    settimeout(connect, retrytimeout);
  }
  conn = net.createconnection(port);
  conn.on('connect', function() {
    retriedtimes = 0;
    console.log('connect to server');
  });
  conn.on('error', function(err) {
    console.log('error in connection:', err);
  });
  conn.on('close', function() {
    if(! quitting) {
      console.log('connection got closed, will try to reconnect');
      reconnect();
    }
  });
  //打印
  conn.pipe(process.stdout, {end: false});
})();

希望本文所述对大家nodejs程序设计有所帮助。