Nodejs 使用net模块创建TCP Server,能否监听多个端口呢?

Nodejs 使用net模块创建TCP Server,能否监听多个端口呢?

var server = net.createServer(function(socket){ }).listen(1234);

我希望能监听多个端口,别且能分辨数据是从哪个端口传进来的。

iptables可以将多个端口转发到’1234’,但tcp server接收数据的时候,不知道来自哪个端口。

请高手指点!

4 回复

当然可以!Node.js 的 net 模块允许你创建一个 TCP 服务器,并且你可以为这个服务器配置多个监听端口。为了区分从不同端口传入的数据,你需要为每个端口创建独立的监听实例。

示例代码

const net = require('net');

// 创建第一个服务器实例并监听端口 1234
const server1 = net.createServer((socket) => {
    socket.write('Hello from server on port 1234\n');
    socket.end(`Data received from port 1234: ${socket.remoteAddress}:${socket.remotePort}\n`);
});
server1.listen(1234, () => {
    console.log('Server listening on port 1234');
});

// 创建第二个服务器实例并监听端口 5678
const server2 = net.createServer((socket) => {
    socket.write('Hello from server on port 5678\n');
    socket.end(`Data received from port 5678: ${socket.remoteAddress}:${socket.remotePort}\n`);
});
server2.listen(5678, () => {
    console.log('Server listening on port 5678');
});

解释

  1. 创建服务器实例:使用 net.createServer() 方法创建两个独立的服务器实例 server1server2
  2. 绑定端口:每个服务器实例分别调用 .listen(port) 方法来监听不同的端口(例如 12345678)。
  3. 处理连接:当客户端连接时,服务器会触发回调函数。在这个回调函数中,你可以通过 socket.remoteAddresssocket.remotePort 获取客户端的 IP 地址和端口号。
  4. 发送响应:服务器向客户端发送响应消息,并包含客户端的 IP 地址和端口号信息。

这样,你就可以轻松地创建一个监听多个端口的 TCP 服务器,并能够分辨数据是从哪个端口传进来的。


这个问题是太简单了,还是太难了……

只能建立两个server了 分别去监听

可以使用Node.js的net模块创建一个TCP服务器来监听多个端口。你可以在同一个服务器对象上多次调用.listen()方法来实现这一点。每次调用.listen()时,可以指定不同的端口号。为了区分数据来自哪个端口,你可以在处理连接时通过检查socket的远程地址信息来判断。

以下是一个简单的示例代码:

const net = require('net');

// 创建一个TCP服务器实例
const server = net.createServer((socket) => {
    // 检查socket的远程地址信息以确定数据来源的端口
    const remoteAddress = socket.remoteAddress;
    const remotePort = socket.remotePort;

    console.log(`Received data from ${remoteAddress}:${remotePort}`);

    // 在这里你可以根据remotePort执行不同的逻辑
    // 处理socket连接

    socket.on('data', (data) => {
        console.log(`Data received: ${data.toString()}`);
    });

    socket.on('end', () => {
        console.log('Client disconnected');
    });
});

// 监听多个端口
server.listen([1234, 5678, 9012], () => {
    console.log('Server is listening on multiple ports');
});

在这个示例中,服务器实例server被配置为同时监听端口1234、5678和9012。当客户端连接到任意一个这些端口时,都会触发net.createServer中的回调函数,并且可以通过socket.remotePort获取连接的端口号,从而知道数据是来自哪个端口。这样你就可以根据不同的端口做出相应的处理了。

回到顶部