创建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);
但是,然后在接收此服务的机器中,我该怎么做才能看到这些属性?
我会帮助任何帮助...
答案 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);
}