HarmonyOS 鸿蒙Next中mDNS无法删除

HarmonyOS 鸿蒙Next中mDNS无法删除

import { mdns } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';

const SERVICE_TYPE = '_wiwi._tcp'
const SERVICE_NAME = '0123456789'
const MY_SERVICE = {
  serviceType: SERVICE_TYPE,
  serviceName: SERVICE_NAME,
  host: {
    address: '192.168.1.188',
    port: 39267
  },
  port: 39267,
  serviceAttribute: []
} as mdns.LocalServiceInfo

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  private discoveryService?: mdns.DiscoveryService
  private myServiceExisted = false
  private myServiceRemoved = false
  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize($r('app.float.page_text_font_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.message = 'Welcome';
        })
    }
    .height('100%')
    .width('100%')
  }

  onPageShow(): void {
    const ctx = getContext(this)
    this.discoveryService = mdns.createDiscoveryService(ctx, SERVICE_TYPE)
    this.discoveryService?.on('discoveryStart', () => {})
    this.discoveryService?.on('discoveryStop', async () => {
      if (!this.myServiceExisted || this.myServiceRemoved) {
        try {
          const res = await mdns.addLocalService(ctx, MY_SERVICE)
          console.log(`success add local service:${JSON.stringify(res)}`)
        } catch (e) {
          const err = e as BusinessError
          console.error(`failed to add local service:${JSON.stringify(MY_SERVICE)}, code:${err.code}, name:${err.name}, message:${err.message}`)
        }
      }
    })
    this.discoveryService?.on('serviceFound', async (data) => {
      if (data.serviceName === SERVICE_NAME) {
        this.myServiceExisted = true
        try {
          const service = await mdns.resolveLocalService(ctx, data)
          console.log(`find last added local service with serviceName:${data.serviceName}, try to remove it`)
          await mdns.removeLocalService(ctx, service)
          this.myServiceRemoved = true
        } catch (e) {
          const err = e as BusinessError
          console.error(`remove local service failed before add a new local service, code:${err.code}, name:${err.name}, message:${err.message}`)
        }
        this.discoveryService?.stopSearchingMDNS()
      }
    })
    this.discoveryService?.on('serviceLost', () => {})
    this.discoveryService?.startSearchingMDNS()
    setTimeout(() => {
      this.discoveryService?.stopSearchingMDNS()
    }, 3000)
  }
}

更多关于HarmonyOS 鸿蒙Next中mDNS无法删除的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

App第一次运行,成功添加了mDNS本地服务,此时kill掉App;

重新运行App,'serviceFound’回调中可以发现上次添加的mDNS,由于serviceName相同,所以我要先删除上次发布的服务,然而执行removeLocalService时,抛出异常:

code:401, name:undefined, message:Parameter error

更多关于HarmonyOS 鸿蒙Next中mDNS无法删除的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,mDNS(Multicast DNS)无法删除的问题可能与系统服务或网络配置有关。mDNS是用于局域网内设备发现和通信的协议,通常由系统服务管理。如果无法删除,可能是由于以下原因:

  1. 系统服务依赖:mDNS可能被系统其他服务或应用依赖,直接删除可能导致功能异常。
  2. 权限限制:删除mDNS可能需要更高的系统权限,普通用户或应用无法直接操作。
  3. 配置锁定:系统可能对mDNS的配置进行了锁定,防止误操作导致网络功能失效。
  4. 版本问题:某些鸿蒙Next版本可能存在mDNS管理的bug或限制,导致无法删除。

要解决此问题,可以检查系统日志或网络配置,确认是否有其他服务依赖mDNS,或尝试在开发者模式下进行相关操作。

在HarmonyOS鸿蒙Next中,如果遇到mDNS无法删除的问题,可能是由于以下原因:

  1. 依赖关系:mDNS可能被其他服务或应用依赖,直接删除会导致系统不稳定。
  2. 权限不足:删除mDNS需要管理员权限,确保你有足够的权限进行操作。
  3. 系统保护:系统可能对关键服务进行了保护,防止误删。

解决方法:

  • 检查是否有其他服务依赖mDNS,解除依赖后再尝试删除。
  • 使用管理员权限进行操作。
  • 通过系统设置或命令行工具(如hdc)进行删除。

注意:删除系统服务可能导致功能异常,建议在测试环境中操作。

回到顶部