nodejs实现局域网通信

1.支持多端通信,广播和单播
2.任何一客户端断开链接,不会影响其余主机通信
3.支持修改主机名

在这里插入图片描述

此处我打开了三个端口。分别设置hostname为user1, user2, user3.

const net = require('net');
var chatServer = net.createServer();
var clientList = [];
chatServer.on('connection', function(client) {
    clientList.push(client);
    client.name = client.remoteAddress + ':' + client.remotePort;
    client.write(
        "help\r\n\r\n"+
        "----------------------------------------------\r\n\r\n"+
        "1. set your host name -> $ setName py\r\n\r\n"+
        "2. broadcast -> hello\r\n\r\n"+
        "3. unicast -> $ to py hello\r\n\r\n"+
        "----------------------------------------------\r\n\r\n"
    );
    let message = "";
    let model = "normal";
    client.on('data', function(data) {
        //console.log(data.toString() == '\r\n');
        
        if(data !=  '\r\n') {
            message += data;
            
        }
        //message中不记录\r\n
        else {
            console.log(message);
            let arr = message.split(' ');
            if(arr[0] == '$') {
                if(arr[1] == 'setName') {
                    client.name = arr[2];
                    client.write(">>>you have set your hostname as " + client.name +"\r\n");
                }
                else if(arr[1] == "to") {
                    let receiver_name = arr[2];
                    arr.splice(0, 3);
                    message = arr.join(' ');
                    console.log(message);
                    unicast(message, receiver_name);
                    client.write(">>>message has been send!\r\n");
                }
            }
            else {
                broadcast(message, client);
                client.write(">>>message has been send!\r\n");
            }
            console.log("host name:");
            for(item of clientList) {
                console.log(item.name);
            }
            
            message = "";
        }
        
    })
    client.on('end', function() {
        clientList.splice(clientList.indexOf(client), 1);
    })
    client.on('error', function(e) {
        console.log(e);
    })
    function broadcast(message, client) {
        for(let i = 0; i < clientList.length; i++) {
            if(client != clientList[i]) {
                clientList[i].write(client.name + ' says to all: ' + message + '\r\n');
            }
        }
       
    }
    function unicast(message, receiver_name) {
        for(item of clientList) {
            if(receiver_name == item.name) {
                item.write(client.name + " only says to you: " + message + '\r\n');
            }
        }
        
    }
})

chatServer.listen(9000);

以后可能会更新新的功能

源码地址:https://github.com/star-hs/nodejs-net-communication/tree/master

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值