0

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

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

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

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);

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

我会感谢任何帮助...

4

2 回答 2

1
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);
}
于 2015-03-17T05:47:15.773 回答
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) 更改属性,并且更改将自动传播到侦听器。

于 2012-07-25T18:04:47.510 回答