如何在小程序内获取局域网IP,非外网IP
发布于 6 年前 作者 qiang75 8667 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

    UDP通讯 wx.createUDPSocket 随着2.7.0基础库一起上线了,准备实验一下,刚一开始就遇到了一个大问题!如何获取本机局域网的IP?

    另外UDP通讯支持组播吗?

---------------------------------------------------------------- 更新分割线 ----------------------------------------------------------------

    手动输入IP测试收发没什么大问题,但有两个问题

    1、为什么发送可以是string/arrayBuffer,接收只有arrayBuffer

    2、局域网UDP为什么还要配置服务器域名?怎么配?目前只能打开调试才能收发成功

---------------------------------------------------------------- 更新分割线 ----------------------------------------------------------------


    UDP不用配服务器域名,是我这边的错觉导致的

  • 希望提供的能力

    提供获取本机局域网IP的接口或创建UDP通讯时返回本机局域网IP

3 回复
var ping = wx.createUDPSocket()
    if (ping === null) {
      console.log('暂不支持')
      return;
    }
    const dIp = "localhost"
    const dPort = ping.bind()
    ping.send({
      address: dIp,
      port: dPort,
      message: "ping"
    })
    var pong = null
    ping.onMessage(function (res) {
      console.log(res)
      let str = util.newAb2Str(res.message)
      if ("pong" != str) {
        for (var i = 0; i < 256; i++) {
          for (var j = 0; j < 256; j++) {
            var ip = "192.168." + i + "." + j
            var port = res.remoteInfo.port
            console.log("PONG", ip, port)
            if (i == 0 && i == j) {
              pong = wx.createUDPSocket()
              pong.bind()
            } else {
              pong.send({
                address: ip,
                port: port,
                message: "pong"
              })
              util.delay(100)
            }
          }
        }
      } else {
        ping.close()
        that.setData({
          locationUrl_ip: res.remoteInfo.address
        })
        that.initUdpSocket()
      }
    })

循环扫描 最无奈的办法了

后续版本会支持该特性,请关注小程序的功能更新

1、

获取本机局域网IP--------------这句话是什么意思?

2、

你是想要获取本机的  ip  ?

还是本机所连接的  wifi(也是路由器)  的  ip  ?

还是本机所在局域网中其它机器的    ip  ?

3、

你要用这什么   ip  干什么?

接收方的ip都是事先定义好,比如小票打印机、报务器,直接给对方发送数据就行,接收方会自动获取到发送方的ip的,真没必要在本机获取本机的ip。

回到顶部