nodejs简易聊天室
博客专区 > 木头 的博客 > 博客详情
nodejs简易聊天室
木头 发表于6年前
nodejs简易聊天室
  • 发表于 6年前
  • 阅读 3063
  • 收藏 7
  • 点赞 0
  • 评论 9

移动开发云端新模式探索实践 >>>   

第一个nodejs简易聊天室

var net = require('net');

var clients = [];

var Client = function(stream) {
 this.name = null;
 this.stream = stream;
};

var server = net.createServer(function (stream) {
 stream.setEncoding('utf-8');
 var address = stream.remoteAddress;
 var client = new Client(stream);
 if (address == '127.0.0.1') {
  client.name = 'system';
  clients.push(client);
 }

 var timeout = setTimeout(function () {
  if (client.name == null) {
   stream.write('对不起,您已经超时!\n');
   stream.end();
  }
 }, 10000);

 stream.on('connect', function() {
  if (address != '127.0.0.1') {
   stream.write('请在10s内输入您的昵称!\n');
  } 
 });

 stream.on('data', function(data) {
  if (client.name == null) {
   var name = data.match(/\S+/);
   var flag = false;
   for (var key in clients) {
     if (String(clients[key].name) == String(name)) {
     flag = true;
     stream.write('对不起,该昵称已被使用,请换个试试!\n');
     break;
    }
   }
   if (flag)
   {
    timeout;
    return;
   }
   client.name = name;
   stream.write('欢迎您进入聊天室!\n');
   clients.forEach(function(c) {
    if (c != client) {
     c.stream.write(client.name+' 进入聊天室!\n');
    } 
   });
   clients.push(client);
   return;
  }

  clients.forEach(function(c) {
   if (c != client) {
    c.stream.write(client.name+" : "+data);
   } 
  });
 });

 stream.on('end', function() {
  clients.forEach(function(c) {
   if (c != client) {
    c.stream.write(client.name+' 离开了!\n');
   }
  });
  stream.end();
  delete clients[client];
 });

 stream.on('error', function(err) {
  console.log(err);
 });
});

server.listen(8000);
标签: nodejs 聊天室
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 6
博文 31
码字总数 7557
评论 (9)
kevinLOHO
不能用啊
木头

引用来自“kevinLOHO”的评论

不能用啊

这个代码有测试过,运行正常。能把你的错误贴出来吗?
这个男人来自地球

引用来自“木头”的评论

引用来自“kevinLOHO”的评论

不能用啊

这个代码有测试过,运行正常。能把你的错误贴出来吗?

没有反应。。
这个男人来自地球

引用来自“木头”的评论

引用来自“kevinLOHO”的评论

不能用啊

这个代码有测试过,运行正常。能把你的错误贴出来吗?

在浏览器那里输入什么地址
这个男人来自地球

引用来自“木头”的评论

引用来自“kevinLOHO”的评论

不能用啊

这个代码有测试过,运行正常。能把你的错误贴出来吗?

在浏览器那里输入什么地址
zhishaofei3
E:\nodejs\chatroom>node index.js

events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1039:14)
at listen (net.js:1061:10)
at Server.listen (net.js:1127:5)
at Object.<anonymous> (E:\nodejs\chatroom\index.js:77:8)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
木头

引用来自“zhishaofei3”的评论

E:\nodejs\chatroom>node index.js

events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1039:14)
at listen (net.js:1061:10)
at Server.listen (net.js:1127:5)
at Object.<anonymous> (E:\nodejs\chatroom\index.js:77:8)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)

恩,的确存在错误事件没有处理,感谢,已更新。
林海寻缘
77行,console····
木头

引用来自“林海寻缘”的评论

77行,console····
多谢指正
×
木头
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: