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是用于局域网内设备发现和通信的协议,通常由系统服务管理。如果无法删除,可能是由于以下原因:
- 系统服务依赖:mDNS可能被系统其他服务或应用依赖,直接删除可能导致功能异常。
- 权限限制:删除mDNS可能需要更高的系统权限,普通用户或应用无法直接操作。
- 配置锁定:系统可能对mDNS的配置进行了锁定,防止误操作导致网络功能失效。
- 版本问题:某些鸿蒙Next版本可能存在mDNS管理的bug或限制,导致无法删除。
要解决此问题,可以检查系统日志或网络配置,确认是否有其他服务依赖mDNS,或尝试在开发者模式下进行相关操作。
在HarmonyOS鸿蒙Next中,如果遇到mDNS无法删除的问题,可能是由于以下原因:
- 依赖关系:mDNS可能被其他服务或应用依赖,直接删除会导致系统不稳定。
- 权限不足:删除mDNS需要管理员权限,确保你有足够的权限进行操作。
- 系统保护:系统可能对关键服务进行了保护,防止误删。
解决方法:
- 检查是否有其他服务依赖mDNS,解除依赖后再尝试删除。
- 使用管理员权限进行操作。
- 通过系统设置或命令行工具(如
hdc
)进行删除。
注意:删除系统服务可能导致功能异常,建议在测试环境中操作。