2012-02-14 3 views
6

Я смог получить образцы, которые поставляются с JmDNS для компиляции и запуска, однако я не могу получить ни один из классов для обнаружения моих сервисов.Образцы с JmDNS

Я бегу среде Windows с несколькими ПК под управлением VNC, SSH & Apache, и я пытался получить JmDNS обнаружить по крайней мере один из них ...

То, что я хочу в идеале должен быть способный обнаруживать все запущенные серверы VNC в моей сети. Существует ли какое-то соединение между клиентом и сервером, где я могу только открыть службу, если я зарегистрировал ее с помощью JmDNS?

Любая помощь, получающая некоторые результаты из образцов, будет оценена, документация не очень помогает.

import java.io.IOException; 
import java.util.logging.ConsoleHandler; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

import javax.jmdns.JmDNS; 
import javax.jmdns.ServiceEvent; 
import javax.jmdns.ServiceListener; 

/** 
* Sample Code for Service Discovery using JmDNS and a ServiceListener. 
* <p> 
* Run the main method of this class. It listens for HTTP services and lists all changes on System.out. 
* 
* @author Werner Randelshofer 
*/ 
public class DiscoverServices { 

    static class SampleListener implements ServiceListener { 
     @Override 
     public void serviceAdded(ServiceEvent event) { 
      System.out.println("Service added : " + event.getName() + "." + event.getType()); 
     } 

     @Override 
     public void serviceRemoved(ServiceEvent event) { 
      System.out.println("Service removed : " + event.getName() + "." + event.getType()); 
     } 

     @Override 
     public void serviceResolved(ServiceEvent event) { 
      System.out.println("Service resolved: " + event.getInfo()); 
     } 
    } 

    /** 
    * @param args 
    *   the command line arguments 
    */ 
    public static void main(String[] args) { 
     try { 

      // Activate these lines to see log messages of JmDNS 
      boolean log = false; 
      if (log) { 
       Logger logger = Logger.getLogger(JmDNS.class.getName()); 
       ConsoleHandler handler = new ConsoleHandler(); 
       logger.addHandler(handler); 
       logger.setLevel(Level.FINER); 
       handler.setLevel(Level.FINER); 
      } 

      final JmDNS jmdns = JmDNS.create(); 
      String type = "_http._tcp.local."; 
      if(args.length > 0) { 
       type = args[0]; 
      } 
      jmdns.addServiceListener(type, new SampleListener()); 

      System.out.println("Press q and Enter, to quit"); 
      int b; 
      while ((b = System.in.read()) != -1 && (char) b != 'q') { 
       /* Stub */ 
      } 
      jmdns.close(); 
      System.out.println("Done"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

JmDNS самостоятельно не работает вообще, вы должны действительно сделать это на всех сетевых картах с помощью NetworkTopologyListener. JmmDNS должен сделать это за вас, но не работал для меня. –

+0

@ErikMartino - вы можете привести пример NetworkTopologyListener, который сделал worK? –

ответ

5

Чтобы открыть определенный вид услуг, вам необходимо знать правильное имя типа службы, проверьте DNS SRV (RFC 2782) Service Types:

String bonjourServiceType = "_http._tcp.local."; 
bonjourService = JmDNS.create(); 
bonjourService.addServiceListener(bonjourServiceType, bonjourServiceListener); 
ServiceInfo[] serviceInfos = bonjourService.list(bonjourServiceType); 
for (ServiceInfo info : serviceInfos) { 
    System.out.println("## resolve service " + info.getName() + " : " + info.getURL()); 
} 
bonjourService.close(); 

Для VNC используйте _rfb._tcp.local.
Для SSH используйте _ssh._tcp.local.
Для Apache используйте _http._tcp.local.

+0

Спасибо, но мой код кажется правильным, я могу установить vnc в настройку mac, но я все еще не могу заставить сервер отображаться даже с кодом, который вы предоставили (что похоже на мой собственный код). Я добавил сообщение выше, чтобы добавить свой тестовый код. Можете ли вы попробовать это в своей сети и проверить, работает ли она? Возможно, в моей настройке что-то не так. – Ali

+1

Если это компьютер Mac, вы можете воспользоваться услугой VNC (Apple Remote Desktop), используя тип сервиса = "_net-assistant._udp." – yorkw

+0

Мне посчастливилось получить код для обнаружения служб на моей локальной машине, но не для служб в локальной сети. Когда я запускаю jmdns jar, появляется диалоговое окно, в котором нет проблем с обнаружением машины в моей сети. Поэтому в настоящее время план состоит в том, чтобы пройти через источник этого диалога и, надеюсь, выяснить, что происходит. – Ali

 Смежные вопросы

  • Нет связанных вопросов^_^