在Moritz Haarmann的博客中,我找到了example of usage of Bonjour by Java。这是从那里取得的代码:
public class ServiceAnnouncer implements IServiceAnnouncer, RegisterListener {
private DNSSDRegistration serviceRecord;
private boolean registered;
public boolean isRegistered(){
return registered;
}
public void registerService() {
try {
serviceRecord = DNSSD.register(0,0,null,"_killerapp._tcp", null,null,1234,null,this);
} catch (DNSSDException e) {
// error handling here
}
}
public void unregisterService(){
serviceRecord.stop();
registered = false;
}
public void serviceRegistered(DNSSDRegistration registration, int flags,String serviceName, String regType, String domain){
registered = true;
}
public void operationFailed(DNSSDService registration, int error){
// do error handling here if you want to.
}
}
我对“serviceRegistered”方法有疑问。据我所知,它是在服务注册期间(或之后)调用的(它将变量“registered”设置为等于“true”)。但我不清楚的是它究竟是如何调用的。因为服务是通过方法“registerService”注册的。此方法又称为“DNSSD.register”。而且,据我所知,“DNSSD.register”将调用“ServiceAnnouncer”类的“serviceRegister”方法。但是“DNSSD.register”如何知道它需要调用“ServiceAnnouncer”类的方法? “DNSSD.register”能否知道它是从特定类调用的(在本例中为“ServiceAnnouncer”类)?
答案 0 :(得分:4)
ServiceAnnouncer
已将自身作为DNSSD.register()
方法的最后一个参数传递,而RegisterListener
方法显然期望DNSSD
的任何实例。这样ServiceAnnouncer
可以直接处理{{1}}实例。
答案 1 :(得分:1)
这个类似乎是一个监听器 - 即RegisterListener
。它已通过传递给DNSSD
方法在register(..)
中注册为听众。