基于NodeJs的局域网聊天室

1.该系统基于nodeJs,electron旨在开发一个桌面端的简单聊天系统(1对1)
2.基于nodeJs的socket编程


思路:
首先需要一个服务器,用来做中转服务,并做一些逻辑判断,从而达到一对一聊天的目的
客户端只需连接服务器,制定一定的数据格式进行发送数据即可
具体的界面则用electron来处理


服务器代码:

var net = require('net'); // 使用net模块(创建TCP的SOCKET)
var PORT = 8080; //端口参数
var server = net.createServer(); //创建一个tcp的服务器
var room = [];//定义一个聊天室的数组

//on函数作用是监听函数,第一个参数为监听的数据名,第二个是监听到后执行的回调函数
server.on('connection', function (socket) {
     //监听connect连接,即当客户端发起链接时,服务器捕获该链接,执行后面的函数
//客户端和服务器完成TCP链接后 会生成一个socket,这里作为回调的参数获取
  console.log("new connection" + socket.remoteAddress + ':' + socket.remotePort);
  socket.on('data', function (data) {
    //给socket 添加监听事件,即当客户端和服务器连接上后 进行的传输皆用该socket 进行
    var data = JSON.parse(data.toString().trim()); //JSON.parse 可将json字符串转换为json对象 【socket传输的时候只支持字符串/二进制】
   //分别获取data内的内容 
    var from = data.from;
    var to = data.to;
    var msg = data.msg;
 //定制聊天室数组内存储的json的格式,用来限制1对1聊天
    var singelRoom = {
      "name1": from,
      "name1S": socket,
      "name2": to
    }
 //如果聊天室为空 直接放入第一个单人聊天室json数据
    if (room.length == 0) {
      room.push(singelRoom);
    }
    var flag = 0;
// 遍历聊天室中的内容
    for (var i in room) {
//聊天室中存的是自己和对方的聊天信息 则执行
      if ((room[i].name1 == from && room[i].name2 == to) || (room[i].name1 == to && room[i].name2 == from)) {
        flag = 1;
    //准确的存入自己的socket
        if(room[i].name1 == from){
          room[i].name1S = socket;
        }
        if(room[i].name2 == from){
          room[i].name2S = socket;
        }
//  如果当前socket 和 单人聊天室json数据的信息一致 则获取第一方的socket
        if (room[i].name1S == socket) {
          if (room[i].name2S != null) {
            var toSocket = room[i].name2S;
            toSocket.write(msg);
          } else {
             //对方socket为空 说明对方没有发送data信息,这里没有保存他的socket信息(可以理解为对方发送消息才算上线,这里就算未上线)
            socket.write("等待对方上线");
          }
        } else {
          room[i].name2S = socket;
          if (room[i].name1S != null) {
            var toSocket = room[i].name1S;         
            toSocket.write(msg);
          } else {
            socket.write("等待对方上线");
          }
        }
      }
    }
    if (flag == 0) {
      //console.log("first");
      room.push(singelRoom);
      //console.log(room.length);
      socket.write("等待对方上线");
    }
  });

//监听客户端的close事件(即下线)
  socket.on('close', function () {
   
    //从聊天室中找到当前的socket 并把它置为空
    if(socket!=null){
      for (var i in room) {
        if(room[i].name1S==socket){
          room[i].name1S=null;
        }
        else if(room[i].name2S==socket){
          room[i].name2S=null;
        }
        else{
          break;
        }
      }
    }
    console.log(
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!下面是一个简单的基于 Node.js 的聊天室示例: ```javascript // 引入必要的模块 const http = require('http'); const express = require('express'); const socketIO = require('socket.io'); // 创建 Express 应用程序 const app = express(); // 创建 HTTP 服务器并将 Express 应用程序与之关联 const server = http.createServer(app); // 创建 Socket.IO 实例并将其与 HTTP 服务器关联 const io = socketIO(server); // 配置静态文件目录 app.use(express.static(__dirname + '/public')); // 处理客户端连接事件 io.on('connection', (socket) => { console.log('A user connected'); // 处理客户端发送的消息 socket.on('chat message', (msg) => { console.log('Message: ' + msg); // 将消息广播给所有连接的客户端 io.emit('chat message', msg); }); // 处理客户端断开连接事件 socket.on('disconnect', () => { console.log('A user disconnected'); }); }); // 启动服务器 const port = 3000; server.listen(port, () => { console.log(`Server is running on port ${port}`); }); ``` 上述代码是一个简单的聊天室应用,使用了 Express 框架和 Socket.IO 库。它创建了一个 HTTP 服务器,用于处理客户端的连接和消息传输。在客户端连接和断开连接时,会在服务器端打印相应的日志。当客户端发送消息时,服务器会将消息广播给所有连接的客户端。 你还需要在同级目录下创建一个 public 文件夹,并在其中创建一个 HTML 文件(例如 index.html),用于展示聊天室界面。在 HTML 文件中,你可以使用 Socket.IO 的客户端库来与服务器建立连接,发送和接收消息。具体的 HTML 和前端代码可以根据你的需求进行设计。 这只是一个简单的示例,你可以根据自己的需求进行扩展和定制。希望对你有所帮助!如果有任何问题,请随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值