Bonjour を Java から使用しようとしています。それを行う方法の例を見つけたので、理解できたと思います。しかし、なぜそんなに複雑な方法でそれを行う必要があるのか 、まだ理解できません。何かが恋しいのかもしれません。
したがって、私が見つけたコードは次のように機能します (コードも以下に示します)。
Javaプログラムはサービスを見つけようとし、サービスが見つかった場合、プログラムはサービスを「解決」しようとします(「サービスを解決する」とは「サービスを使用する」または「サービスに接続する」ことを意味すると思います)。
見つかったサービスを「解決」するには、「DNSSD.resolve」メソッドを呼び出す必要があり、このメソッドの最後の引数としてオブジェクトを指定する必要があります。
「DNSSD.resolve」は、特定のサービスを解決しようとします。「DNSSD.resolve」がサービスを解決できる場合、最後の引数として指定されたインスタンスの「serviceResolved」メソッドを呼び出します。「DNSSD.resolve」がサービスを解決できない場合、ti は上記オブジェクトの「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」は true を返します。それ以外の場合は false を返します。
プログラムは、「DNSSD.resolve」によって返された値に応じて、「serviceResolved」または「operationFailed」メソッドのいずれかを実行します。
それとも、OOP の考え方に慣れていないだけですか?