如何在接收方看到JmDNS服务的属性?

时间:2011-09-16 13:42:37

标签: bonjour zeroconf jmdns

创建JmDNS服务的一种方法是:

 ServiceInfo.create(type, name, port, weight, priority, props);

其中props是一个描述服务某些特性的Map。有没有人举例说明theese属性的使用,例如如何在接收器部分使用它们。 我试过了:

Hashtable<String,String> settings = new Hashtable<String,String>();
settings.put("host", "hhgh");
settings.put("web_port", "hdhr");
settings.put("secure_web_port", "dfhdyhdh");
ServiceInfo info = ServiceInfo.create("_workstation._tcp.local.", "service6", 80, 0, 0, true, settings);

但是,然后在接收此服务的机器中,我该怎么做才能看到这些属性?

我会帮助任何帮助...

2 个答案:

答案 0 :(得分:0)

已经有一段时间了,但我有同样的问题。原始问题的一个问题是主机和端口不应该放在文本字段中,在这种情况下,实际上应该有两种服务类型,一种是安全的,一种是不安全的(或者可能使用子类型)。

以下是获取正在运行的工作站服务列表的不完整示例:

ServiceInfo[] serviceInfoList = jmdns.list("_workstation._tcp.local.");
if(serviceInfoList != null) {
  for (int index = 0; index < serviceInfoList.length; index++) {
    int port = serviceInfoList[index].getPort();
    int priority = serviceInfoList[index].getPriority();
    int weight = serviceInfoList[index].getWeight();
    InetAddress address = serviceInfoList[index].getInetAddresses()[0];
    String someProperty = serviceInfoList[index].getPropertyString("someproperty");

    // Build a UI or use some logic to decide if this service provider is the
    // one you want to use based on prority, properties, etc.
    ...
  }
}

由于实现JmDNS的方式,对给定类型的list()的第一次调用很慢(几秒钟),但后续调用将非常快。服务提供者可以通过调用info.setText(settings)来更改属性,更改将自动传播给侦听器。

答案 1 :(得分:0)

ServiceInfo info = jmDNS.getServiceInfo(serviceEvent.getType(), serviceEvent.getName());

Enumeration<String> ps = info.getPropertyNames();

while (ps.hasMoreElements()) {
    String key = ps.nextElement();
    String value = info.getPropertyString(key);
    System.out.println(key + " " + value);
}