1# @ohos.net.mdns (MDNS管理) 2 3MDNS即多播DNS(Multicast DNS),提供局域网内的本地服务添加、移除、发现、解析等能力。 4 5> **说明:** 6> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 7 8## 导入模块 9 10```ts 11import mdns from '@ohos.net.mdns' 12``` 13 14## mdns.addLocalService<sup>10+</sup> 15 16addLocalService(context: Context, serviceInfo: LocalServiceInfo, callback: AsyncCallback\<LocalServiceInfo>): void 17 18添加一个mDNS服务,使用callback方式作为异步方法。 19 20**系统能力**:SystemCapability.Communication.NetManager.MDNS 21 22**参数:** 23 24| 参数名 | 类型 | 必填 | 说明 | 25|-------------|----------------------------------|-----------|-------------------------------------------------| 26| context | Context | 是 | 应用的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-app-ability-uiAbility.md)。 | 27| serviceInfo | [LocalServiceInfo](#localserviceinfo) | 是 | mDNS服务的信息。 | 28| callback | AsyncCallback\<[LocalServiceInfo](#localserviceinfo)> | 是 | 回调函数。成功添加error为undefined,data为添加到本地的mdns服务信息。 | 29 30**错误码:** 31 32| 错误码ID | 错误信息 | 33|---------|---| 34| 401 | Parameter error. | 35| 2100002 | Operation failed. Cannot connect to service. | 36| 2100003 | System internal error. | 37| 2204003 | Callback duplicated. | 38| 2204008 | Service instance duplicated. | 39| 2204010 | Send packet failed. | 40 41> **错误码说明:** 42> 以上错误码的详细介绍参见[MDNS错误码](../errorcodes/errorcode-net-mdns.md)。 43 44**示例:** 45 46Stage模型示例: 47 48```ts 49// 获取context 50import mdns from '@ohos.net.mdns' 51import UIAbility from '@ohos.app.ability.UIAbility'; 52import { BusinessError } from '@ohos.base'; 53import window from '@ohos.window'; 54 55export class GlobalContext { 56 private constructor() {} 57 private static instance: GlobalContext; 58 private _objects = new Map<string, Object>(); 59 60 public static getContext(): GlobalContext { 61 if (!GlobalContext.instance) { 62 GlobalContext.instance = new GlobalContext(); 63 } 64 return GlobalContext.instance; 65 } 66 67 getObject(value: string): Object | undefined { 68 return this._objects.get(value); 69 } 70 71 setObject(key: string, objectClass: Object): void { 72 this._objects.set(key, objectClass); 73 } 74} 75 76class EntryAbility extends UIAbility { 77 value:number = 0; 78 onWindowStageCreate(windowStage:window.WindowStage): void{ 79 GlobalContext.getContext().setObject("value", this.value); 80 } 81} 82let context = GlobalContext.getContext().getObject("value"); 83 84let localServiceInfo: mdns.LocalServiceInfo = { 85 serviceType: "_print._tcp", 86 serviceName: "servicename", 87 port: 5555, 88 host: { 89 address: "10.14.**.***", 90 }, 91 serviceAttribute: [{key: "111", value: [1]}] 92} 93 94mdns.addLocalService(context as Context, localServiceInfo, (error:BusinessError, data:mdns.LocalServiceInfo) => { 95 console.log(JSON.stringify(error)); 96 console.log(JSON.stringify(data)); 97}); 98``` 99 100## mdns.addLocalService<sup>10+</sup> 101 102addLocalService(context: Context, serviceInfo: LocalServiceInfo): Promise\<LocalServiceInfo> 103 104添加一个mDNS服务,使用Promise方式作为异步方法。 105 106**系统能力**:SystemCapability.Communication.NetManager.MDNS 107 108**参数:** 109 110| 参数名 | 类型 | 必填 | 说明 | 111|-------------|----------------------------------|-----------|-------------------------------------------------| 112| context | Context | 是 | 应用的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-app-ability-uiAbility.md)。 | 113| serviceInfo | [LocalServiceInfo](#localserviceinfo) | 是 | mDNS服务的信息。 | 114 115**返回值:** 116 117| 类型 | 说明 | 118| --------------------------------- | ------------------------------------- | 119| Promise\<[LocalServiceInfo](#localserviceinfo)> | 以Promise形式返回添加的mdns服务信息。 | 120 121**错误码:** 122 123| 错误码ID | 错误信息 | 124|---------|---| 125| 401 | Parameter error. | 126| 2100002 | Operation failed. Cannot connect to service. | 127| 2100003 | System internal error. | 128| 2204003 | Callback duplicated. | 129| 2204008 | Service instance duplicated. | 130| 2204010 | Send packet failed. | 131 132> **错误码说明:** 133> 以上错误码的详细介绍参见[MDNS错误码](../errorcodes/errorcode-net-mdns.md)。 134 135**示例:** 136 137Stage模型示例: 138 139```ts 140// 获取context 141import mdns from '@ohos.net.mdns' 142import UIAbility from '@ohos.app.ability.UIAbility'; 143import { BusinessError } from '@ohos.base'; 144import window from '@ohos.window'; 145 146export class GlobalContext { 147 private constructor() {} 148 private static instance: GlobalContext; 149 private _objects = new Map<string, Object>(); 150 151 public static getContext(): GlobalContext { 152 if (!GlobalContext.instance) { 153 GlobalContext.instance = new GlobalContext(); 154 } 155 return GlobalContext.instance; 156 } 157 158 getObject(value: string): Object | undefined { 159 return this._objects.get(value); 160 } 161 162 setObject(key: string, objectClass: Object): void { 163 this._objects.set(key, objectClass); 164 } 165} 166 167class EntryAbility extends UIAbility { 168 value:number = 0; 169 onWindowStageCreate(windowStage:window.WindowStage): void{ 170 GlobalContext.getContext().setObject("value", this.value); 171 } 172} 173let context = GlobalContext.getContext().getObject("value"); 174 175let localServiceInfo: mdns.LocalServiceInfo = { 176 serviceType: "_print._tcp", 177 serviceName: "servicename", 178 port: 5555, 179 host: { 180 address: "10.14.**.***", 181 }, 182 serviceAttribute: [{key: "111", value: [1]}] 183} 184 185mdns.addLocalService(context as Context, localServiceInfo).then((data: mdns.LocalServiceInfo) => { 186 console.log(JSON.stringify(data)); 187}); 188``` 189 190## mdns.removeLocalService<sup>10+</sup> 191 192removeLocalService(context: Context, serviceInfo: LocalServiceInfo, callback: AsyncCallback\<LocalServiceInfo>): void 193 194移除一个mDNS服务,使用callback方式作为异步方法。 195 196**系统能力**: SystemCapability.Communication.NetManager.MDNS 197 198**参数** 199 200| 参数名 | 类型 | 必填 | 说明 | 201|-------------|----------------------------------|-----------|-------------------------------------------------| 202| context | Context | 是 | 应用的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-app-ability-uiAbility.md)。 | 203| serviceInfo | [LocalServiceInfo](#localserviceinfo) | 是 | mDNS服务的信息。 | 204| callback | AsyncCallback\<[LocalServiceInfo](#localserviceinfo)> | 是 | 回调函数。成功移除error为undefined,data为移除本地的mdns服务信息。 | 205 206**错误码:** 207 208| 错误码ID | 错误信息 | 209|---------|---| 210| 401 | Parameter error. | 211| 2100002 | Operation failed. Cannot connect to service. | 212| 2100003 | System internal error. | 213| 2204002 | Callback not found. | 214| 2204008 | Service instance not found. | 215| 2204010 | Send packet failed. | 216 217> **错误码说明:** 218> 以上错误码的详细介绍参见[MDNS错误码](../errorcodes/errorcode-net-mdns.md)。 219 220**示例:** 221 222Stage模型示例: 223 224```ts 225// 获取context 226import mdns from '@ohos.net.mdns' 227import UIAbility from '@ohos.app.ability.UIAbility'; 228import { BusinessError } from '@ohos.base'; 229import window from '@ohos.window'; 230 231export class GlobalContext { 232 private constructor() {} 233 private static instance: GlobalContext; 234 private _objects = new Map<string, Object>(); 235 236 public static getContext(): GlobalContext { 237 if (!GlobalContext.instance) { 238 GlobalContext.instance = new GlobalContext(); 239 } 240 return GlobalContext.instance; 241 } 242 243 getObject(value: string): Object | undefined { 244 return this._objects.get(value); 245 } 246 247 setObject(key: string, objectClass: Object): void { 248 this._objects.set(key, objectClass); 249 } 250} 251 252class EntryAbility extends UIAbility { 253 value:number = 0; 254 onWindowStageCreate(windowStage:window.WindowStage): void{ 255 GlobalContext.getContext().setObject("value", this.value); 256 } 257} 258let context = GlobalContext.getContext().getObject("value"); 259 260let localServiceInfo: mdns.LocalServiceInfo = { 261 serviceType: "_print._tcp", 262 serviceName: "servicename", 263 port: 5555, 264 host: { 265 address: "10.14.**.***", 266 }, 267 serviceAttribute: [{key: "111", value: [1]}] 268} 269 270mdns.removeLocalService(context as Context, localServiceInfo, (error: BusinessError, data: mdns.LocalServiceInfo) => { 271 console.log(JSON.stringify(error)); 272 console.log(JSON.stringify(data)); 273}); 274``` 275 276## mdns.removeLocalService<sup>10+</sup> 277 278removeLocalService(context: Context, serviceInfo: LocalServiceInfo): Promise\<LocalServiceInfo> 279 280移除一个mDNS服务. 使用Promise方式作为异步方法。 281 282**系统能力**: SystemCapability.Communication.NetManager.MDNS 283 284**参数** 285 286| 参数名 | 类型 | 必填 | 说明 | 287|-------------|----------------------------------|-----------|-------------------------------------------------| 288| context | Context | 是 | 应用的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-app-ability-uiAbility.md)。 | 289| serviceInfo | [LocalServiceInfo](#localserviceinfo) | 是 | mDNS服务的信息。 | 290 291**返回值:** 292 293| 类型 | 说明 | 294| --------------------------------- | ------------------------------------- | 295| Promise\<[LocalServiceInfo](#localserviceinfo)> | 以Promise形式返回移除的mdns服务信息。 | 296 297**错误码:** 298 299| 错误码ID | 错误信息 | 300|---------|---| 301| 401 | Parameter error. | 302| 2100002 | Operation failed. Cannot connect to service. | 303| 2100003 | System internal error. | 304| 2204002 | Callback not found. | 305| 2204008 | Service instance not found. | 306| 2204010 | Send packet failed. | 307 308> **错误码说明:** 309> 以上错误码的详细介绍参见[MDNS错误码](../errorcodes/errorcode-net-mdns.md)。 310 311**示例:** 312 313Stage模型示例: 314 315```ts 316import mdns from '@ohos.net.mdns' 317// 获取context 318import UIAbility from '@ohos.app.ability.UIAbility'; 319import { BusinessError } from '@ohos.base'; 320import window from '@ohos.window'; 321 322export class GlobalContext { 323 private constructor() {} 324 private static instance: GlobalContext; 325 private _objects = new Map<string, Object>(); 326 327 public static getContext(): GlobalContext { 328 if (!GlobalContext.instance) { 329 GlobalContext.instance = new GlobalContext(); 330 } 331 return GlobalContext.instance; 332 } 333 334 getObject(value: string): Object | undefined { 335 return this._objects.get(value); 336 } 337 338 setObject(key: string, objectClass: Object): void { 339 this._objects.set(key, objectClass); 340 } 341} 342 343class EntryAbility extends UIAbility { 344 value:number = 0; 345 onWindowStageCreate(windowStage:window.WindowStage): void{ 346 GlobalContext.getContext().setObject("value", this.value); 347 } 348} 349let context = GlobalContext.getContext().getObject("value"); 350 351let localServiceInfo: mdns.LocalServiceInfo = { 352 serviceType: "_print._tcp", 353 serviceName: "servicename", 354 port: 5555, 355 host: { 356 address: "10.14.**.***", 357 }, 358 serviceAttribute: [{key: "111", value: [1]}] 359} 360 361mdns.removeLocalService(context as Context, localServiceInfo).then((data: mdns.LocalServiceInfo) => { 362 console.log(JSON.stringify(data)); 363}); 364``` 365 366## mdns.createDiscoveryService<sup>10+</sup> 367 368createDiscoveryService(context: Context, serviceType: string): DiscoveryService 369 370返回一个DiscoveryService对象,该对象用于发现指定服务类型的mDNS服务。 371 372**系统能力**:SystemCapability.Communication.NetManager.MDNS 373 374**参数:** 375 376| 参数名 | 类型 | 必填 | 说明 | 377|-------------|---------|-----------| ------------------------------------------------------------ | 378| context | Context | 是 | 应用的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-app-ability-uiAbility.md)。 | 379| serviceType | string | 是 | 需要发现的mDNS服务类型。| 380 381**返回值:** 382 383| Type | Description | 384| ----------------------------- |---------------------------------| 385| DiscoveryService | 基于指定serviceType和Context的发现服务对象。 | 386 387**错误码:** 388 389| 错误码ID | 错误信息 | 390|---------|---| 391| 401 | Parameter error. | 392 393**示例** 394 395Stage模型示例: 396 397```ts 398// 获取context 399import mdns from '@ohos.net.mdns' 400import UIAbility from '@ohos.app.ability.UIAbility'; 401import { BusinessError } from '@ohos.base'; 402import window from '@ohos.window'; 403 404export class GlobalContext { 405 private constructor() {} 406 private static instance: GlobalContext; 407 private _objects = new Map<string, Object>(); 408 409 public static getContext(): GlobalContext { 410 if (!GlobalContext.instance) { 411 GlobalContext.instance = new GlobalContext(); 412 } 413 return GlobalContext.instance; 414 } 415 416 getObject(value: string): Object | undefined { 417 return this._objects.get(value); 418 } 419 420 setObject(key: string, objectClass: Object): void { 421 this._objects.set(key, objectClass); 422 } 423} 424 425class EntryAbility extends UIAbility { 426 value:number = 0; 427 onWindowStageCreate(windowStage:window.WindowStage): void{ 428 GlobalContext.getContext().setObject("value", this.value); 429 } 430} 431let context = GlobalContext.getContext().getObject("value"); 432 433let serviceType = "_print._tcp"; 434let discoveryService : Object = mdns.createDiscoveryService(context as Context, serviceType); 435``` 436 437## mdns.resolveLocalService<sup>10+</sup> 438 439resolveLocalService(context: Context, serviceInfo: LocalServiceInfo, callback: AsyncCallback\<LocalServiceInfo>): void 440 441解析一个mDNS服务,使用callback方式作为异步方法。 442 443**系统能力**: SystemCapability.Communication.NetManager.MDNS 444 445**参数:** 446 447| 参数名 | 类型 | 必填 | 说明 | 448|-------------|----------------------------------|-----------|-------------------------------------------------------------| 449| context | Context | 是 | 应用的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-app-ability-uiAbility.md)。 | 450| serviceInfo | [LocalServiceInfo](#localserviceinfo) | 是 | mDNS服务的信息。 | 451| callback | AsyncCallback\<[LocalServiceInfo](#localserviceinfo)> | 是 | 回调函数。成功移除error为undefined,data为解析的mdns服务信息。 | 452 453**错误码:** 454 455| 错误码ID | 错误信息 | 456|---------|----------------------------------------------| 457| 401 | Parameter error. | 458| 2100002 | Operation failed. Cannot connect to service. | 459| 2100003 | System internal error. | 460| 2204003 | Callback duplicated. | 461| 2204006 | Request timeout. | 462| 2204010 | Send packet failed. | 463 464> **错误码说明:** 465> 以上错误码的详细介绍参见[MDNS错误码](../errorcodes/errorcode-net-mdns.md)。 466 467**示例:** 468 469Stage模型示例: 470 471```ts 472// 获取context 473import mdns from '@ohos.net.mdns' 474import UIAbility from '@ohos.app.ability.UIAbility'; 475import { BusinessError } from '@ohos.base'; 476import window from '@ohos.window'; 477 478export class GlobalContext { 479 private constructor() {} 480 private static instance: GlobalContext; 481 private _objects = new Map<string, Object>(); 482 483 public static getContext(): GlobalContext { 484 if (!GlobalContext.instance) { 485 GlobalContext.instance = new GlobalContext(); 486 } 487 return GlobalContext.instance; 488 } 489 490 getObject(value: string): Object | undefined { 491 return this._objects.get(value); 492 } 493 494 setObject(key: string, objectClass: Object): void { 495 this._objects.set(key, objectClass); 496 } 497} 498 499class EntryAbility extends UIAbility { 500 value:number = 0; 501 onWindowStageCreate(windowStage:window.WindowStage): void{ 502 GlobalContext.getContext().setObject("value", this.value); 503 } 504} 505let context = GlobalContext.getContext().getObject("value"); 506 507let localServiceInfo: mdns.LocalServiceInfo = { 508 serviceType: "_print._tcp", 509 serviceName: "servicename", 510 port: 5555, 511 host: { 512 address: "10.14.**.***", 513 }, 514 serviceAttribute: [{key: "111", value: [1]}] 515} 516 517mdns.resolveLocalService(context as Context, localServiceInfo, (error: BusinessError, data: mdns.LocalServiceInfo) => { 518 console.log(JSON.stringify(error)); 519 console.log(JSON.stringify(data)); 520}); 521``` 522 523## mdns.resolveLocalService<sup>10+</sup> 524 525resolveLocalService(context: Context, serviceInfo: LocalServiceInfo): Promise\<LocalServiceInfo> 526 527解析一个mDNS服务,使用Promise方式作为异步方法。 528 529**系统能力**: SystemCapability.Communication.NetManager.MDNS 530 531**参数:** 532 533| 参数名 | 类型 | 必填 | 说明 | 534|-------------|--------------|-----------|-----------------------------------------------------| 535| context | Context | 是 | 应用的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-app-ability-uiAbility.md)。 | 536| serviceInfo | [LocalServiceInfo](#localserviceinfo) | 是 | mDNS服务的信息。 | 537 538**返回值:** 539 540| 类型 | 说明 | 541|----------------------------| ------------------------------------- | 542| Promise\<[LocalServiceInfo](#localserviceinfo)> | 以Promise形式返回解析的mDNS服务信息。| 543 544**错误码:** 545 546| 错误码ID | 错误信息 | 547|---------|----------------------------------------------| 548| 401 | Parameter error. | 549| 2100002 | Operation failed. Cannot connect to service. | 550| 2100003 | System internal error. | 551| 2204003 | Callback duplicated. | 552| 2204006 | Request timeout. | 553| 2204010 | Send packet failed. | 554 555> **错误码说明:** 556> 以上错误码的详细介绍参见[MDNS错误码](../errorcodes/errorcode-net-mdns.md)。 557 558**示例:** 559 560Stage模型示例: 561 562```ts 563// 获取context 564import mdns from '@ohos.net.mdns' 565import UIAbility from '@ohos.app.ability.UIAbility'; 566import { BusinessError } from '@ohos.base'; 567import window from '@ohos.window'; 568 569export class GlobalContext { 570 private constructor() {} 571 private static instance: GlobalContext; 572 private _objects = new Map<string, Object>(); 573 574 public static getContext(): GlobalContext { 575 if (!GlobalContext.instance) { 576 GlobalContext.instance = new GlobalContext(); 577 } 578 return GlobalContext.instance; 579 } 580 581 getObject(value: string): Object | undefined { 582 return this._objects.get(value); 583 } 584 585 setObject(key: string, objectClass: Object): void { 586 this._objects.set(key, objectClass); 587 } 588} 589 590class EntryAbility extends UIAbility { 591 value:number = 0; 592 onWindowStageCreate(windowStage:window.WindowStage): void{ 593 GlobalContext.getContext().setObject("value", this.value); 594 } 595} 596let context = GlobalContext.getContext().getObject("value"); 597 598let localServiceInfo: mdns.LocalServiceInfo = { 599 serviceType: "_print._tcp", 600 serviceName: "servicename", 601 port: 5555, 602 host: { 603 address: "10.14.**.***", 604 }, 605 serviceAttribute: [{key: "111", value: [1]}] 606} 607 608mdns.resolveLocalService(context as Context, localServiceInfo).then((data: mdns.LocalServiceInfo) => { 609 console.log(JSON.stringify(data)); 610}); 611``` 612## DiscoveryService<sup>10+</sup> 613 614指定服务类型的发现服务对象。 615 616### startSearchingMDNS<sup>10+</sup> 617 618startSearchingMDNS(): void 619 620开始搜索局域网内的mDNS服务。 621 622**系统能力**:SystemCapability.Communication.NetManager.MDNS 623 624**示例:** 625 626Stage模型示例: 627 628```ts 629// 获取context 630import mdns from '@ohos.net.mdns' 631import UIAbility from '@ohos.app.ability.UIAbility'; 632import { BusinessError } from '@ohos.base'; 633import window from '@ohos.window'; 634 635export class GlobalContext { 636 private constructor() {} 637 private static instance: GlobalContext; 638 private _objects = new Map<string, Object>(); 639 640 public static getContext(): GlobalContext { 641 if (!GlobalContext.instance) { 642 GlobalContext.instance = new GlobalContext(); 643 } 644 return GlobalContext.instance; 645 } 646 647 getObject(value: string): Object | undefined { 648 return this._objects.get(value); 649 } 650 651 setObject(key: string, objectClass: Object): void { 652 this._objects.set(key, objectClass); 653 } 654} 655 656class EntryAbility extends UIAbility { 657 value:number = 0; 658 onWindowStageCreate(windowStage:window.WindowStage): void{ 659 GlobalContext.getContext().setObject("value", this.value); 660 } 661} 662let context = GlobalContext.getContext().getObject("value"); 663let serviceType = "_print._tcp"; 664let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 665discoveryService.startSearchingMDNS(); 666``` 667 668### stopSearchingMDNS<sup>10+</sup> 669 670stopSearchingMDNS(): void 671 672停止搜索局域网内的mDNS服务。 673 674**系统能力**:SystemCapability.Communication.NetManager.MDNS 675 676**示例:** 677 678Stage模型示例: 679 680```ts 681// 获取context 682import mdns from '@ohos.net.mdns' 683import UIAbility from '@ohos.app.ability.UIAbility'; 684import { BusinessError } from '@ohos.base'; 685import window from '@ohos.window'; 686 687export class GlobalContext { 688 private constructor() {} 689 private static instance: GlobalContext; 690 private _objects = new Map<string, Object>(); 691 692 public static getContext(): GlobalContext { 693 if (!GlobalContext.instance) { 694 GlobalContext.instance = new GlobalContext(); 695 } 696 return GlobalContext.instance; 697 } 698 699 getObject(value: string): Object | undefined { 700 return this._objects.get(value); 701 } 702 703 setObject(key: string, objectClass: Object): void { 704 this._objects.set(key, objectClass); 705 } 706} 707 708class EntryAbility extends UIAbility { 709 value:number = 0; 710 onWindowStageCreate(windowStage:window.WindowStage): void{ 711 GlobalContext.getContext().setObject("value", this.value); 712 } 713} 714let context = GlobalContext.getContext().getObject("value"); 715let serviceType = "_print._tcp"; 716let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 717discoveryService.stopSearchingMDNS(); 718``` 719 720### on('discoveryStart')<sup>10+</sup> 721 722on(type: 'discoveryStart', callback: Callback<{serviceInfo: LocalServiceInfo, errorCode?: MdnsError}>): void 723 724订阅开启监听mDNS服务的通知。 725 726**系统能力**:SystemCapability.Communication.NetManager.MDNS 727 728**参数:** 729 730| 参数名 | 类型 | 必填 | 说明 | 731|-------------|--------------|-----------|-----------------------------------------------------| 732| type | string | 是 |订阅事件,固定为'discoveryStart'。<br>discoveryStart:开始搜索局域网内的mDNS服务事件。 | 733| callback | Callback<{serviceInfo: [LocalServiceInfo](#localserviceinfo), errorCode?: [MdnsError](#mdnserror)}> | 是 | mDNS服务的信息和事件错误信息。 | 734 735**示例:** 736 737```ts 738import mdns from '@ohos.net.mdns' 739import UIAbility from '@ohos.app.ability.UIAbility'; 740import { BusinessError } from '@ohos.base'; 741import window from '@ohos.window'; 742 743export class GlobalContext { 744 private constructor() {} 745 private static instance: GlobalContext; 746 private _objects = new Map<string, Object>(); 747 748 public static getContext(): GlobalContext { 749 if (!GlobalContext.instance) { 750 GlobalContext.instance = new GlobalContext(); 751 } 752 return GlobalContext.instance; 753 } 754 755 getObject(value: string): Object | undefined { 756 return this._objects.get(value); 757 } 758 759 setObject(key: string, objectClass: Object): void { 760 this._objects.set(key, objectClass); 761 } 762} 763 764class EntryAbility extends UIAbility { 765 value:number = 0; 766 onWindowStageCreate(windowStage:window.WindowStage): void{ 767 GlobalContext.getContext().setObject("value", this.value); 768 } 769} 770 771// 参考mdns.createDiscoveryService 772class DataServiceInfo{ 773 serviceInfo: mdns.LocalServiceInfo|null = null 774 errorCode?: mdns.MdnsError = 0 775} 776let context = GlobalContext.getContext().getObject("value"); 777let serviceType = "_print._tcp"; 778let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 779discoveryService.startSearchingMDNS(); 780 781discoveryService.on('discoveryStart', (data: DataServiceInfo) => { 782 console.log(JSON.stringify(data)); 783}); 784 785discoveryService.stopSearchingMDNS(); 786``` 787 788### off('discoveryStart')<sup>10+</sup> 789 790off(type: 'discoveryStart', callback?: Callback<{ serviceInfo: LocalServiceInfo, errorCode?: MdnsError }>): void 791 792取消开启监听mDNS服务的通知。 793 794**系统能力**:SystemCapability.Communication.NetManager.MDNS 795 796**参数:** 797 798| 参数名 | 类型 | 必填 | 说明 | 799|-------------|--------------|-----------|-----------------------------------------------------| 800| type | string | 是 |取消订阅的事件,固定为'discoveryStart'。<br>discoveryStart:开始搜索局域网内的mDNS服务事件。 | 801| callback | Callback<{serviceInfo: [LocalServiceInfo](#localserviceinfo), errorCode?: [MdnsError](#mdnserror)}> | 否 | mDNS服务的信息和事件错误信息。 | 802 803**示例:** 804 805```ts 806import mdns from '@ohos.net.mdns' 807import UIAbility from '@ohos.app.ability.UIAbility'; 808import { BusinessError } from '@ohos.base'; 809import window from '@ohos.window'; 810 811export class GlobalContext { 812 private constructor() {} 813 private static instance: GlobalContext; 814 private _objects = new Map<string, Object>(); 815 816 public static getContext(): GlobalContext { 817 if (!GlobalContext.instance) { 818 GlobalContext.instance = new GlobalContext(); 819 } 820 return GlobalContext.instance; 821 } 822 823 getObject(value: string): Object | undefined { 824 return this._objects.get(value); 825 } 826 827 setObject(key: string, objectClass: Object): void { 828 this._objects.set(key, objectClass); 829 } 830} 831 832class EntryAbility extends UIAbility { 833 value:number = 0; 834 onWindowStageCreate(windowStage:window.WindowStage): void{ 835 GlobalContext.getContext().setObject("value", this.value); 836 } 837} 838// 参考mdns.createDiscoveryService 839let context = GlobalContext.getContext().getObject("value"); 840let serviceType = "_print._tcp"; 841let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 842discoveryService.startSearchingMDNS(); 843 844interface Data { 845 serviceInfo: mdns.LocalServiceInfo, 846 errorCode?: mdns.MdnsError 847} 848discoveryService.on('discoveryStart', (data: Data) => { 849 console.log(JSON.stringify(data)); 850}); 851 852discoveryService.stopSearchingMDNS(); 853 854discoveryService.off('discoveryStart', (data: Data) => { 855 console.log(JSON.stringify(data)); 856}); 857``` 858 859### on('discoveryStop')<sup>10+</sup> 860 861on(type: 'discoveryStop', callback: Callback<{serviceInfo: LocalServiceInfo, errorCode?: MdnsError}>): void 862 863订阅停止监听mDNS服务的通知。 864 865**系统能力**:SystemCapability.Communication.NetManager.MDNS 866 867**参数:** 868 869| 参数名 | 类型 | 必填 | 说明 | 870|-------------|--------------|-----------|-----------------------------------------------------| 871| type | string | 是 |订阅事件,固定为'discoveryStop'。<br>discoveryStop:停止搜索局域网内的mDNS服务事件。 | 872| callback | Callback<{serviceInfo: [LocalServiceInfo](#localserviceinfo), errorCode?: [MdnsError](#mdnserror)}> | 是 | mDNS服务的信息和事件错误信息。 | 873 874**示例:** 875 876```ts 877import mdns from '@ohos.net.mdns' 878import UIAbility from '@ohos.app.ability.UIAbility'; 879import { BusinessError } from '@ohos.base'; 880import window from '@ohos.window'; 881 882export class GlobalContext { 883 private constructor() {} 884 private static instance: GlobalContext; 885 private _objects = new Map<string, Object>(); 886 887 public static getContext(): GlobalContext { 888 if (!GlobalContext.instance) { 889 GlobalContext.instance = new GlobalContext(); 890 } 891 return GlobalContext.instance; 892 } 893 894 getObject(value: string): Object | undefined { 895 return this._objects.get(value); 896 } 897 898 setObject(key: string, objectClass: Object): void { 899 this._objects.set(key, objectClass); 900 } 901} 902 903class EntryAbility extends UIAbility { 904 value:number = 0; 905 onWindowStageCreate(windowStage:window.WindowStage): void{ 906 GlobalContext.getContext().setObject("value", this.value); 907 } 908} 909// 参考mdns.createDiscoveryService 910let context = GlobalContext.getContext().getObject("value"); 911let serviceType = "_print._tcp"; 912let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 913discoveryService.startSearchingMDNS(); 914 915interface Data { 916 serviceInfo: mdns.LocalServiceInfo, 917 errorCode?: mdns.MdnsError 918} 919discoveryService.on('discoveryStop', (data: Data) => { 920 console.log(JSON.stringify(data)); 921}); 922 923discoveryService.stopSearchingMDNS(); 924``` 925 926### off('discoveryStop')<sup>10+</sup> 927 928off(type: 'discoveryStop', callback?: Callback<{ serviceInfo: LocalServiceInfo, errorCode?: MdnsError }>): void 929 930取消订阅停止监听mDNS服务的通知。 931 932**系统能力**:SystemCapability.Communication.NetManager.MDNS 933 934**参数:** 935 936| 参数名 | 类型 | 必填 | 说明 | 937|-------------|--------------|-----------|-----------------------------------------------------| 938| type | string | 是 |取消订阅的事件'discoveryStop'。<br>discoveryStop:停止搜索局域网内的mDNS服务事件。 | 939| callback | Callback<{serviceInfo: [LocalServiceInfo](#localserviceinfo), errorCode?: [MdnsError](#mdnserror)}> | 否 | mDNS服务的信息和事件错误信息。 | 940 941**示例:** 942 943```ts 944import mdns from '@ohos.net.mdns' 945import UIAbility from '@ohos.app.ability.UIAbility'; 946import { BusinessError } from '@ohos.base'; 947import window from '@ohos.window'; 948 949export class GlobalContext { 950 private constructor() {} 951 private static instance: GlobalContext; 952 private _objects = new Map<string, Object>(); 953 954 public static getContext(): GlobalContext { 955 if (!GlobalContext.instance) { 956 GlobalContext.instance = new GlobalContext(); 957 } 958 return GlobalContext.instance; 959 } 960 961 getObject(value: string): Object | undefined { 962 return this._objects.get(value); 963 } 964 965 setObject(key: string, objectClass: Object): void { 966 this._objects.set(key, objectClass); 967 } 968} 969 970class EntryAbility extends UIAbility { 971 value:number = 0; 972 onWindowStageCreate(windowStage:window.WindowStage): void{ 973 GlobalContext.getContext().setObject("value", this.value); 974 } 975} 976// 参考mdns.createDiscoveryService 977let context = GlobalContext.getContext().getObject("value"); 978let serviceType = "_print._tcp"; 979let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 980discoveryService.startSearchingMDNS(); 981 982interface Data { 983 serviceInfo: mdns.LocalServiceInfo, 984 errorCode?: mdns.MdnsError 985} 986discoveryService.on('discoveryStop', (data: Data) => { 987 console.log(JSON.stringify(data)); 988}); 989 990discoveryService.stopSearchingMDNS(); 991 992discoveryService.off('discoveryStop', (data: Data) => { 993 console.log(JSON.stringify(data)); 994}); 995``` 996 997### on('serviceFound')<sup>10+</sup> 998 999on(type: 'serviceFound', callback: Callback\<LocalServiceInfo>): void 1000 1001订阅发现mDNS服务的通知。 1002 1003**系统能力**:SystemCapability.Communication.NetManager.MDNS 1004 1005**参数:** 1006 1007| 参数名 | 类型 | 必填 | 说明 | 1008|-------------|--------------|-----------|-----------------------------------------------------| 1009| type | string | 是 |订阅事件,固定为'serviceFound'。<br>serviceFound:发现mDNS服务事件。 | 1010| callback | Callback<[LocalServiceInfo](#localserviceinfo)> | 是 | mDNS服务的信息。 | 1011 1012**示例:** 1013 1014```ts 1015import mdns from '@ohos.net.mdns' 1016import UIAbility from '@ohos.app.ability.UIAbility'; 1017import { BusinessError } from '@ohos.base'; 1018import window from '@ohos.window'; 1019 1020export class GlobalContext { 1021 private constructor() {} 1022 private static instance: GlobalContext; 1023 private _objects = new Map<string, Object>(); 1024 1025 public static getContext(): GlobalContext { 1026 if (!GlobalContext.instance) { 1027 GlobalContext.instance = new GlobalContext(); 1028 } 1029 return GlobalContext.instance; 1030 } 1031 1032 getObject(value: string): Object | undefined { 1033 return this._objects.get(value); 1034 } 1035 1036 setObject(key: string, objectClass: Object): void { 1037 this._objects.set(key, objectClass); 1038 } 1039} 1040 1041class EntryAbility extends UIAbility { 1042 value:number = 0; 1043 onWindowStageCreate(windowStage:window.WindowStage): void{ 1044 GlobalContext.getContext().setObject("value", this.value); 1045 } 1046} 1047// 参考mdns.createDiscoveryService 1048let context = GlobalContext.getContext().getObject("value"); 1049let serviceType = "_print._tcp"; 1050let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 1051discoveryService.startSearchingMDNS(); 1052 1053discoveryService.on('serviceFound', (data: mdns.LocalServiceInfo) => { 1054 console.log(JSON.stringify(data)); 1055}); 1056 1057discoveryService.stopSearchingMDNS(); 1058``` 1059 1060### off('serviceFound')<sup>10+</sup> 1061 1062off(type: 'serviceFound', callback?: Callback\<LocalServiceInfo>): void 1063 1064取消订阅发现mDNS服务的通知。 1065 1066**系统能力**:SystemCapability.Communication.NetManager.MDNS 1067 1068**参数:** 1069 1070| 参数名 | 类型 | 必填 | 说明 | 1071|-------------|--------------|-----------|-----------------------------------------------------| 1072| type | string | 是 |取消订阅的事件,固定为'serviceFound'。<br>serviceFound:发现mDNS服务事件。 | 1073| callback | Callback<[LocalServiceInfo](#localserviceinfo)> | 否 | mDNS服务的信息。 | 1074 1075**示例:** 1076 1077```ts 1078import mdns from '@ohos.net.mdns' 1079import UIAbility from '@ohos.app.ability.UIAbility'; 1080import { BusinessError } from '@ohos.base'; 1081import window from '@ohos.window'; 1082 1083export class GlobalContext { 1084 private constructor() {} 1085 private static instance: GlobalContext; 1086 private _objects = new Map<string, Object>(); 1087 1088 public static getContext(): GlobalContext { 1089 if (!GlobalContext.instance) { 1090 GlobalContext.instance = new GlobalContext(); 1091 } 1092 return GlobalContext.instance; 1093 } 1094 1095 getObject(value: string): Object | undefined { 1096 return this._objects.get(value); 1097 } 1098 1099 setObject(key: string, objectClass: Object): void { 1100 this._objects.set(key, objectClass); 1101 } 1102} 1103 1104class EntryAbility extends UIAbility { 1105 value:number = 0; 1106 onWindowStageCreate(windowStage:window.WindowStage): void{ 1107 GlobalContext.getContext().setObject("value", this.value); 1108 } 1109} 1110// 参考mdns.createDiscoveryService 1111let context = GlobalContext.getContext().getObject("value"); 1112let serviceType = "_print._tcp"; 1113let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 1114discoveryService.startSearchingMDNS(); 1115 1116discoveryService.on('serviceFound', (data: mdns.LocalServiceInfo) => { 1117 console.log(JSON.stringify(data)); 1118}); 1119 1120discoveryService.stopSearchingMDNS(); 1121 1122discoveryService.off('serviceFound', (data: mdns.LocalServiceInfo) => { 1123 console.log(JSON.stringify(data)); 1124}); 1125``` 1126 1127### on('serviceLost')<sup>10+</sup> 1128 1129on(type: 'serviceLost', callback: Callback\<LocalServiceInfo>): void 1130 1131订阅移除mDNS服务的通知。 1132 1133**系统能力**:SystemCapability.Communication.NetManager.MDNS 1134 1135**参数:** 1136 1137| 参数名 | 类型 | 必填 | 说明 | 1138|-------------|--------------|-----------|-----------------------------------------------------| 1139| type | string | 是 |订阅事件,固定为'serviceLost'。<br>serviceLost:移除mDNS服务事件。 | 1140| callback | Callback<[LocalServiceInfo](#localserviceinfo)> | 是 | mDNS服务的信息。 | 1141 1142**示例:** 1143 1144```ts 1145import mdns from '@ohos.net.mdns' 1146import UIAbility from '@ohos.app.ability.UIAbility'; 1147import { BusinessError } from '@ohos.base'; 1148import window from '@ohos.window'; 1149 1150export class GlobalContext { 1151 private constructor() {} 1152 private static instance: GlobalContext; 1153 private _objects = new Map<string, Object>(); 1154 1155 public static getContext(): GlobalContext { 1156 if (!GlobalContext.instance) { 1157 GlobalContext.instance = new GlobalContext(); 1158 } 1159 return GlobalContext.instance; 1160 } 1161 1162 getObject(value: string): Object | undefined { 1163 return this._objects.get(value); 1164 } 1165 1166 setObject(key: string, objectClass: Object): void { 1167 this._objects.set(key, objectClass); 1168 } 1169} 1170 1171class EntryAbility extends UIAbility { 1172 value:number = 0; 1173 onWindowStageCreate(windowStage:window.WindowStage): void{ 1174 GlobalContext.getContext().setObject("value", this.value); 1175 } 1176} 1177// 参考mdns.createDiscoveryService 1178let context = GlobalContext.getContext().getObject("value"); 1179let serviceType = "_print._tcp"; 1180let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 1181discoveryService.startSearchingMDNS(); 1182 1183discoveryService.on('serviceLost', (data: mdns.LocalServiceInfo) => { 1184 console.log(JSON.stringify(data)); 1185}); 1186 1187discoveryService.stopSearchingMDNS(); 1188``` 1189 1190### off('serviceLost')<sup>10+</sup> 1191 1192off(type: 'serviceLost', callback?: Callback\<LocalServiceInfo>): void 1193 1194取消订阅移除mDNS服务的通知。 1195 1196**系统能力**:SystemCapability.Communication.NetManager.MDNS 1197 1198**参数:** 1199 1200| 参数名 | 类型 | 必填 | 说明 | 1201|-------------|--------------|-----------|-----------------------------------------------------| 1202| type | string | 是 |取消订阅的事件,固定为'serviceLost'。<br>serviceLost:移除mDNS服务事件。 | 1203| callback | Callback<[LocalServiceInfo](#localserviceinfo)> | 否 | mDNS服务的信息。 | 1204 1205**示例:** 1206 1207```ts 1208import mdns from '@ohos.net.mdns' 1209import UIAbility from '@ohos.app.ability.UIAbility'; 1210import { BusinessError } from '@ohos.base'; 1211import window from '@ohos.window'; 1212 1213export class GlobalContext { 1214 private constructor() {} 1215 private static instance: GlobalContext; 1216 private _objects = new Map<string, Object>(); 1217 1218 public static getContext(): GlobalContext { 1219 if (!GlobalContext.instance) { 1220 GlobalContext.instance = new GlobalContext(); 1221 } 1222 return GlobalContext.instance; 1223 } 1224 1225 getObject(value: string): Object | undefined { 1226 return this._objects.get(value); 1227 } 1228 1229 setObject(key: string, objectClass: Object): void { 1230 this._objects.set(key, objectClass); 1231 } 1232} 1233 1234class EntryAbility extends UIAbility { 1235 value:number = 0; 1236 onWindowStageCreate(windowStage:window.WindowStage): void{ 1237 GlobalContext.getContext().setObject("value", this.value); 1238 } 1239} 1240// 参考mdns.createDiscoveryService 1241let context = GlobalContext.getContext().getObject("value"); 1242let serviceType = "_print._tcp"; 1243let discoveryService = mdns.createDiscoveryService(context as Context, serviceType); 1244discoveryService.startSearchingMDNS(); 1245 1246discoveryService.on('serviceLost', (data: mdns.LocalServiceInfo) => { 1247 console.log(JSON.stringify(data)); 1248}); 1249 1250discoveryService.stopSearchingMDNS(); 1251 1252discoveryService.off('serviceLost', (data: mdns.LocalServiceInfo) => { 1253 console.log(JSON.stringify(data)); 1254}); 1255``` 1256 1257## LocalServiceInfo<sup>10+</sup> 1258 1259mDNS服务信息 1260 1261**系统能力**:SystemCapability.Communication.NetManager.MDNS 1262 1263| 名称 | 类型 | 必填 | 说明 | 1264| --------------------- | ---------------------------------- | --- | ------------------------ | 1265| serviceType | string | 是 | mDNS服务的类型。格式_\<name>.<_tcp/_udp>,name长度小于63字符并且不能包含字符'.'。 | 1266| serviceName | string | 是 | mDNS服务的名字。 | 1267| port | number | 否 | mDNS服务的端口号。 | 1268| host | [NetAddress](js-apis-net-connection.md#netaddress) | 否 | mDNS服务设备的IP地址。采用设备的IP,添加服务和移除服务时候不生效。 | 1269| serviceAttribute | serviceAttribute\<[ServiceAttribute](#serviceattribute)> | 否 | mDNS服务属性信息。 | 1270 1271## ServiceAttribute<sup>10+</sup> 1272 1273mDNS服务属性信息 1274 1275**系统能力**:SystemCapability.Communication.NetManager.MDNS 1276 1277| 名称 | 类型 | 必填 | 说明 | 1278| --------------------- | ---------------------------------- | --- | ------------------------ | 1279| key | string | 是 | mDNS服务属性键值,键值长度应该小于9个字符。 | 1280| value | Array\<number> | 是 | mDNS服务属性值。 | 1281 1282## MdnsError 1283 1284mDNS错误信息。 1285 1286**系统能力**:SystemCapability.Communication.NetManager.MDNS 1287 1288| 名称 | 值 | 说明 | 1289| --------------- | ---- | ----------- | 1290| INTERNAL_ERROR | 0 | 内部错误导致操作失败。(暂不支持) | 1291| ALREADY_ACTIVE | 1 | 服务已经存在导致操作失败。(暂不支持) | 1292| MAX_LIMIT | 2 | 请求超过最大限制导致操作失败。(暂不支持) | 1293