2012-02-14 6 views
6

के साथ नमूने मैं संकलन और चलाने के लिए जेएमडीएनएस के साथ आने वाले नमूने प्राप्त करने में सक्षम हूं, हालांकि मुझे अपनी सेवाओं को खोजने के लिए कोई भी कक्षा नहीं मिल सकती है।जेएमडीएनएस

मैं कई पीसी चल VNC, SSH & अपाचे के साथ एक Windows वातावरण चल रहा हूँ और मैं 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

अकेले जेएमडीएनएस सामान्य रूप से काम नहीं करता है, आपको वास्तव में नेटवर्क टोपोलॉजी लिस्टनर का उपयोग करके सभी नेटवर्क कार्ड पर करना चाहिए। JmmDNS इसे आपके लिए करना चाहिए लेकिन मेरे लिए काम नहीं किया। –

+0

@ErikMartino- क्या आप नेटवर्क टोपोलॉजी लिस्टनर का उदाहरण दे सकते हैं जो खराब हो गया? –

उत्तर

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._tcp.local का उपयोग करें।
अपाचे के लिए, _http._tcp.local का उपयोग करें।

+0

धन्यवाद लेकिन मेरा कोड सही लगता है, मैं मैक I सेटअप में vnc कर सकता हूं, लेकिन मैं अभी भी आपके द्वारा प्रदान किए गए कोड के साथ सर्वर को सूचीबद्ध नहीं कर सकता (जो मेरे अपने कोड के समान है)। मैंने अपना परीक्षण कोड जोड़ने के लिए उपर्युक्त पोस्ट संपादित किया है। क्या आप इसे अपने नेटवर्क पर आज़मा सकते हैं और यह सत्यापित कर सकते हैं कि यह काम करता है या नहीं? शायद मेरे सेटअप में कहीं कुछ गलत है। – Ali

+1

यदि यह एक मैक मशीन है, तो आप सेवा प्रकार = "_net-assistant._udp" का उपयोग करके वीएनसी सेवा (ऐप्पल रिमोट डेस्कटॉप) को बढ़ा सकते हैं। – yorkw

+0

मुझे अपनी स्थानीय मशीन पर सेवाओं का पता लगाने के लिए कुछ भाग्य प्राप्त हुआ है लेकिन स्थानीय नेटवर्क पर सेवाएं नहीं। जब मैं jmdns jar निष्पादित करता हूं, तो एक संवाद आता है जिसमें मेरे नेटवर्क पर मशीन का पता लगाने में कोई समस्या नहीं होती है। तो वर्तमान में इस संवाद के लिए स्रोत के माध्यम से कदम उठाना है और उम्मीद है कि क्या हो रहा है। – Ali