Java에서 Bonjour를 사용하려고합니다. 나는 그것을하는 방법의 예를 발견했고 나는 그것을 이해했다고 생각한다. 그러나 나는 왜 그렇게 복잡한 방식으로해야하는지 이해하지 못합니다. 나는 무엇인가 놓칠지도 모른다.왜 그렇게 복잡한 방식으로해야합니까? OOP 사고 방식인가요?
따라서 code I found은 다음과 같은 방식으로 작동합니다 (코드도 아래에 나와 있습니다).
- , 프로그램 서비스 (I "는 서비스를 해결하기 위해"생각이 연결 "또는"서비스를 이용하려면 "의미"해결 "을 시도 서비스에 ").
발견 된 서비스를 "해결하려면" "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! } });
Java 프로그램이 서비스를 찾을 수 및 서비스가 발견되면 시도
"DNSSD.resolve"메소드를 해결하려는 서비스에 대한 정보와 함께 호출합니다.
"DNSSD.resolve"에 개체를 전달하지 않습니다.
"DNSSD.resolve"는 어떤 클래스의 메서드도 호출하지 않습니다.
"DNSSD.resolve"는 제공된 서비스를 "확인"하려고 시도하고 수행 할 수있는 경우 "DNSSD.resolve"가 true를 반환합니다. 그렇지 않은 경우는 false를 리턴합니다.
프로그램은 "DNSSD.resolve"가 반환 한 값에 따라 "serviceResolved"또는 "operationFailed"메소드를 실행합니다.
아니면 그냥 OOP 사고 방식에 익숙하지 않았습니까?
이 "병렬 처리"는 어떤 시점에서 소개됩니까? 어떤 순간에 프로그램은 DNSSD.resolve를 호출하고 DNSSD가 서비스를 해결할 때까지 호출 프로그램이 대기해야한다고 생각했습니다. – Roman
아니요. 해상도가 아직 완료되지 않은 경우에도 DNSSD.resolve()가 즉시 반환됩니다. 프로그램은 GUI 루프를 처리하는 메인 루프로 되돌아 갈 수 있습니다. 해상도가 끝나면 핸들러 객체는 별도의 스레드에서 호출되며 스레드의 결과를 사용하여 작업하거나 GUI 스레드로 메시지를 대기시켜 결과를 표시 할 수 있습니다. – Wyzard