📜  Node.js socket.address() 方法(1)

📅  最后修改于: 2023-12-03 14:44:40.226000             🧑  作者: Mango

Node.js socket.address()方法

在Node.js网络编程中,socket.address()方法是指返回网络地址信息之一的对象。

该方法允许开发者访问一个Socket实例的绑定地址。这可以提供已打开套接字的端口和IP地址。根据所运行的操作系统和打开Socket的方式不同,可以获得多种形式的IP地址信息。

返回值是一个JavaScript对象,它有以下属性:

  • address: 返回字符串类型的IP地址
  • family: 返回整数类型的IP协议族(4/6)
  • port: 返回整数类型的端口号

下面是使用socket.address()方法的一些示例:

获取服务器端口
const net = require('net');
const server = net.createServer((socket) => {
  // connection listener
});
server.listen(() => {
  console.log('server bound');
  console.log(server.address().port); // 返回服务器监听的端口号
});
获取本机IP地址
const os = require('os');
const ifaces = os.networkInterfaces(); // 获取本机所有的网络接口信息
Object.keys(ifaces).forEach((ifname) => {
  let alias = 0;
  ifaces[ifname].forEach((iface) => {
    if ('IPv4' !== iface.family || iface.internal !== false) {
      // 如果不是IPv4或者是内部地址则忽略
      return;
    }
    if (alias >= 1) {
      console.log(ifname + ':' + alias, iface.address);
    } else {
      console.log(ifname, iface.address);
      // var socket = net.connect(4096, iface.address);
    }
    ++alias;
  });
});

我们来详细解释上面这个代码:

首先,使用os.networkInterfaces()来获取本机网络接口的信息。

每个接口都是一个数组,数组中的每个对象包含有关该接口的详细信息,包括IP地址和MAC地址等。

现在,遍历每个接口的所有地址。如果接口的家族不是IPv4或是内部接口,则跳过。

否则,我们将Socket连接到“iface.address”(接口地址)并指定端口号 4096。

这里需要说明一下:

iface.address为字符串类型,格式为例如"192.168.2.2"的IP地址。

net.connect(端口号, IP地址)可以使用指定的端口号和IP地址创建一个新的Socket连接。

可以看出,使用socket.address()方法可以帮助我们快速的获取服务器端口和本地IPv4地址。