• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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