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

本文实例讲述了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程序设计有所帮助。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容