मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरे नेटवर्क पर विशिष्ट होस्ट पहुंच योग्य हैं या नहीं। इस प्रकार मेरे जावा कोड है:जावा InetAddress.isReachable() टाइमआउट
InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}
यह काफी अच्छी तरह से काम करता है, लेकिन अगर मैं समय समाप्ति के बजाय 500ms कहना निचले हिस्से, इसे अब और होस्ट पहुंच को नामित नहीं होंगे। मैं लूप में कुछ होस्टों की जांच करने की योजना बना रहा हूं, इसलिए कम टाइमआउट होना काफी महत्वपूर्ण है। यदि मैं विंडोज कमांड लाइन से होस्ट को मैन्युअल रूप से पिंग करता हूं, तो इसमें 10ms से कम लगते हैं।
तो जावा विधि को सफल होने के लिए बहुत अधिक समय समाप्ति की आवश्यकता क्यों है? क्या isReachable()
का उपयोग करने के कोई विकल्प हैं?
धन्यवाद, अनिवार्य रूप से हाँ, मैं बंदरगाहों को पोर्ट 10001 पर कनेक्ट/चेक करना चाहता हूं जिसका उपयोग उन उपकरणों द्वारा किया जाता है जिन्हें मुझे ढूंढना है। क्या आप संभवतः उस ज्ञात पोर्ट चेक को कार्यान्वित करने का उदाहरण दे सकते हैं? – Jerome
ठीक है, मैं एक गैर-अवरुद्ध I/O (एनआईओ) विधि को लागू करने में नहीं जाता हूं। लेकिन मैं बस एक सॉकेट बनाउंगा। गंतव्य आईपी और पोर्ट 10001 के साथ सॉकेट एड्रेस बनाएं। फिर उपयुक्त टाइमआउट के साथ सॉकेट.कनेक्ट (सॉकेट एड्रेस, टाइमआउट) पर कॉल करें। टाइमऑट अपवाद पकड़ो। यदि सॉकेट.कनेक्ट() अपवाद के बिना लौटाता है, तो सॉकेट बंद करें, आपको पता है कि डिवाइस 10001 पर सुन रहा है। एनआईओ मॉडल के लिए, नेटटी ओपन-सोर्स प्रोजेक्ट और उदाहरणों पर एक नज़र डालें। – brettw