收藏
回答

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

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
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

最后一次编辑于  05-10  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • Link
    Link
    06-03

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

    06-03
    赞同 1
    回复
  • skybosi
    skybosi
    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()
          }
        })

    循环扫描 最无奈的办法了

    07-28
    赞同
    回复 1
    • 鲤子
      鲤子
      07-29

      我们ip都是10.0.0.x

      手动滑稽

      07-29
      回复
  • 漫
    05-13

    1、

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

    2、

    你是想要获取本机的  ip  ?

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

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

    3、

    你要用这什么   ip  干什么?


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

    05-13
    赞同
    回复 3
    • Stephen
      Stephen
      05-13

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

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

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

      05-13
      回复
    • S-J-C
      S-J-C
      08-27
      是本机的再局域网中的IP,可以获取到吗?
      08-27
      回复