我正在尝试使用 Java 中的 Bonjour。我找到了一个如何做的例子,我想我理解了。但我仍然不明白为什么要以如此复杂的方式完成。可能是我错过了什么。
所以,我发现的代码以下列方式工作(代码也在下面给出)。
Java 程序尝试查找服务,如果找到该服务,程序会尝试“解析”该服务(我认为“解析服务”的意思是“使用服务”或“连接到服务”)。
要“解析”找到的服务,我们需要调用“DNSSD.resolve”方法,并且作为该方法的最后一个参数,我们需要提供一个对象。
“DNSSD.resolve”尝试解析给定的服务。如果“DNSSD.resolve”能够解析服务,它会调用作为最后一个参数给出的实例的“serviceResolved”方法。如果“DNSSD.resolve”无法解析服务,则调用上述对象的“operationFailed”方法。
这是代码:
DNSSD.resolve(0, ifIndex, serviceName, regType, domain, new ResolveListener(){
public void serviceResolved(DNSSDService resolver, int flags, int ifIndex,
String fullname, String hostname, int port, TXTRecord txtRecord){
InetAddress theAddress;
try {
theAddress = InetAddress.getByName(hostname);
} catch (UnknownHostException e) {
// ouch..
}
}
public void operationFailed(DNSSDService arg0, int arg1) {
// ouch, again!
}
});
用下面的方式组织代码会不会更简单。
我们使用有关我们要解析的服务的信息调用“DNSSD.resolve”方法。
我们不会将任何对象传递给“DNSSD.resolve”。
“DNSSD.resolve”不调用任何类的任何方法。
“DNSSD.resolve”试图“解析”给定的服务,如果它能够做到,“DNSSD.resolve”返回真。否则返回false。
程序根据“DNSSD.resolve”返回的值运行“serviceResolved”或“operationFailed”方法。
还是我只是不习惯 OOP 的思维方式?