>  Q&A  >  본문

javascript - nodejs如何获取本机在局域网中的IP

下个星期向同学展示一个联机小游戏,在自己电脑上开个服务器让他们通过来连接访问进入游戏,但是因为ip不固定,每次都要改客户端文件里面连接服务器的url。所以能不能到时候告诉同学们我电脑ip地址后让他们直接在浏览器里面输入ip加端口访问进入游戏,但是希望客户端可以动态获取服务器ip,而不是写死的;说的可能不清楚,我用的是socket.io.js,客户端有个方法io.connect(url)所以就必须知道这个url。其实可以从浏览器地址栏获取,但是感觉这样不太好,有谁有比较好的方法吗,么么哒

PHP中文网PHP中文网2722일 전468

모든 응답(2)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-10 16:02:22

    真实的项目可以在服务端启动的时候获取本地 ip,然后写入到静态文件(如 HTML 中的某个隐藏标签中),这样 JavaScript 可以动态获取。也可以通过调用 server 的接口来获取参数再交给 socket.io。

    比如说很多前端项目用 gulp 做构建(当然任何 task runner 都可以),那么就可以在服务器端启动服务前运行 production 环境构建,由于构建是运行在 node 环境下的,可以获取到任何你想要的数据(只要够权限),命令行获取的参数可以传递给 gulp 脚本,然后 gulp build 时写入目标文件(比如利用 gulp-replace 等插件),之后浏览器加载页面时,JS 动态获取插入的信息即可。

    因此,既然你有 node 的服务端,自然可以在伺服静态资源之前动态改写(或插入)其中的内容,这并不是什么困难的工作。

    再简单一点,也可以服务端把必要的信息写入一个数据文件(比如 JSON),然后 JS 请求这个文件来获取也可以,其道理类似服务端扩展一个接口供客户端访问。

    直接获取浏览器的 url 不是不可以,但当然不够好,因为很多时候 socket 服务未必和 web server 在一个 host 上。

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 16:02:22

    var os=require('os'),
        iptable={},
        ifaces=os.networkInterfaces();
    for (var dev in ifaces) {
      ifaces[dev].forEach(function(details,alias){
        if (details.family=='IPv4') {
          iptable[dev+(alias?':'+alias:'')]=details.address;
        }
      });
    }
    console.log(iptable);

    회신하다
    0
  • 취소회신하다