使用nodejs监听多个tcp端口

编程入门 行业动态 更新时间:2024-10-11 07:27:01

使用nodejs监听<a href=https://www.elefans.com/category/jswz/34/1771377.html style=多个tcp端口"/>

使用nodejs监听多个tcp端口

.--------。 .----------。 .----------。|客户| ---> |服务器A | | Cntrller |'--------''----------''----------'.--------。 .----------。 .----------。|客户| |服务器A | | Cntrller |'--------''----------''----------'.--------。 .----------。|客户| ---------------------> | Cntrller |'--------''----------'.--------。 .----------。|客户|

我想通过使用nodejs同时监听两个TCP端口。一个用于客户,另一个用于Cntrller。首先,客户端将身份验证请求发送到服务器。然后,服务器将具有随机数的客户端地址广播到特定端口。客户获得随机数后,他/她将使用自己的签名和自己的公共密钥将其发送给Cntrller。然后,Cntrller会通过验证即将到来的公钥和随机数来检查是否从客户端收到即将到来的数据。

但是,我必须侦听两个不同的端口,并且无法通过在nodejs上使用TCP来做到这一点。我该如何实现?谢谢。

这是我的代码,

服务器部分:

const fs = require("fs");

// Get the filenames of user1 directory
dir_name = "../wallet/user1/";
const user1_info_dir = fs.readdirSync(dir_name);             

// Assign specific file names on them
const user1_pub_file = dir_name + user1_info_dir[1];

// Read .pem by using "pem-file" package
const user1_pub_pem = fs.readFileSync(user1_pub_file)


const net = require('net'); 
const host = "127.0.0.1";
const port = 9000;


const server = net.createServer(); 


server.listen(port, host, () => { 
    console.log(`TCP Client listening on ${host}:${port}`); 
}); 


let sockets = []; 
server.on('connection', (socket) => { 
    var clientAddress = `${socket.remoteAddress}:${socket.remotePort}`; 
    console.log(`new client connected: ${clientAddress}`); 
    
    sockets.push(socket); 
    // console.log(sockets);
   
    socket.once('data', (data) => {
        console.log(`Client ${clientAddress}: ${data}`); 
        const crypto = require('crypto');
        const buf = crypto.randomBytes(256);
        //console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`);   
                
        //Write the data back to all the connected, the client will receive it as data from the server 
        sockets.forEach((sock) => { 
            var arr = [user1_pub_pem, buf];
            sock.write(Buffer.concat(arr));            
        }); 
    });

    // Add a 'close' event handler to this instance of socket 
    socket.on('close', (data) => { 
        let index = sockets.findIndex((o) => { 
            return o.remoteAddress === socket.remoteAddress && o.remotePort === socket.remotePort; 
        })

        if (index !== -1) sockets.splice(index, 1); 

        sockets.forEach((sock) => { 
            sock.write(`${clientAddress} disconnected\n`); 
        });

        console.log(`connection closed: ${clientAddress}`); 
    });

    // Add a 'error' event handler to this instance of socket 
    socket.on('error', (err) => { 
        console.log(`Error occurred in ${clientAddress}: ${err.message}`); 
    });
}); 
回答如下:

您是否考虑过创建两个服务器对象?如下所示:

const server1 = net.createServer(); 
const server2 = net.createServer(); 

server1.listen(9001, host, () => { 
    console.log(`TCP Client listening on ${host}:9001`); 
}); 
server2.listen(9002, host, () => { 
    console.log(`TCP Client listening on ${host}:9002`); 
});

这将侦听两个不同的TCP端口,即9001和9002。或者我完全听不懂您的问题?

更多推荐

使用nodejs监听多个tcp端口

本文发布于:2024-05-07 15:37:25,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   端口   nodejs   tcp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!