收藏
回答

如何在小程序内获取局域网IP,非外网IP

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小游戏 需求 wx.createUDPSocket 工具 7.0.3 2.7.0

- 需求的场景描述(希望解决的问题)


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

    另外UDP通讯支持组播吗?


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


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

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

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


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


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


- 希望提供的能力


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

最后一次编辑于  2019-05-10
回答关注问题邀请回答
收藏

3 个回答

  • 小程序/小游戏开发-Link
    小程序/小游戏开发-Link
    2019-06-03

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

    2019-06-03
    赞同 2
    回复 2
    • kAng
      kAng
      2019-12-31
      轮询要65000多次,最后一位255还不支持,官方倒是开放个获取内网ip的接口呀!mdns又太费事......
      2019-12-31
      回复
    • 杨栋
      杨栋
      02-11
      半年了有新消息么
      02-11
      回复
  • skybosi
    skybosi
    2019-07-28
    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()
          }
        })

    循环扫描 最无奈的办法了

    2019-07-28
    赞同
    回复 2
    • 鲤子
      鲤子
      2019-07-29

      我们ip都是10.0.0.x

      手动滑稽

      2019-07-29
      回复
    • 令狐冲
      令狐冲
      2019-11-15
      这个不是办法,家庭局域网是192.168.1.X的居多。但是稍微大一点的局域网都不是192开头的。这不适用于所有的场合。
      2019-11-15
      回复
  • 漫
    2019-05-13

    1、

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

    2、

    你是想要获取本机的  ip  ?

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

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

    3、

    你要用这什么   ip  干什么?


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

    2019-05-13
    赞同
    回复 4
    • Stephen
      Stephen
      2019-05-13

      我们要做的是 小程序与小程序的局域网联机 不是连接智能电器

      2019-05-13
      回复
    • 漫
      2019-05-13回复Stephen

       还真是有需要获取本机ip,和局域网中有哪些机器在线,这样就可以联机了

      2019-05-13
      回复
    • S-J-C
      S-J-C
      2019-08-27
      是本机的再局域网中的IP,可以获取到吗?
      2019-08-27
      回复
    • skybosi
      skybosi
      2019-10-20
      严重怀疑微信聊天记录上传到电脑就是这种局域网通讯实现的
      2019-10-20
      回复
登录 后发表内容