2011-11-28 5 views
5

विभिन्न आईपी पते के साथ मेरे नेटवर्क में 5 डिवाइस हैं। मैं इन उपकरणों से कनेक्ट करना चाहता हूं और उनके नेटवर्क में उपलब्ध होने पर टीसीपी/आईपी सॉकेट पर डेटा प्राप्त करना चाहता हूं। मैं कैसे जांच सकता हूं कि वे जावा में उपलब्ध हैं या नहीं?मैं कैसे जांचूं कि जावा में आईपी जिंदा है या नहीं?

public void setUpConnection() { 
    try { 
     Socket client = new Socket(hostIp, hostPort); 
     socketReader = client.getInputStream(); 
     socketWriter = new PrintWriter(client.getOutputStream()); 
    } catch (UnknownHostException e) { 
     System.out.println("Error setting up socket connection: unknown host at " + hostIp); 
     System.out.println("host: " + hostIp + "port: " + hostPort); 
    } catch (IOException e) { 
     System.out.println("Error setting up socket connection: " + e); 
     System.out.println("host: " + hostIp + "port:" + hostPort); 
    } 
} 
+0

आप एक सॉकेट अगर उस पोर्ट उपलब्ध है निर्धारित करने के लिए प्रत्येक होस्ट से कनेक्ट खोल सकते हैं। –

उत्तर

15
InetAddress.getByName(host).isReachable(timeOut); 

आगे संदर्भ here

1

अगर आप सिर्फ जाए या नहीं मेजबान निर्भर है जाँच करना चाहते हैं, तो आप isReachable

1

शुद्ध जावा के लिए उपयोग कर सकते हैं वहाँ मूल रूप से दो तरीके हैं:

  1. सक्रिय: आपके उदाहरण के रूप में, लेकिन सभी बंदरगाहों के माध्यम से लूपिंग और होस्ट पर सभी बाध्य आईपी

  2. निष्क्रिय: पूर्वनिर्धारित बंदरगाहों पर एक छोटा सर्वर चला रहा है और दूसरा उपलब्ध होने पर स्वयं को पंजीकृत कर देगा।

isReachable दस्तावेज़ों में बताए गए कई कारणों से विफल हो सकता है।

+0

ये मेरे सभी डिवाइस के मेजबान और बंदरगाह हैं: 1- 1 9 .1.168.30.190:3001 2- 1 9 .1.168.30.191:3001 3- 1 9 .1.168.30.192:3001 4- 1 9 .1.168.30.193:3001 5- 1 9 .1.168.30.194:3001 क्या आप कृपया एक दे सकते हैं निष्क्रिय तरीके का नमूना? – michdraft

+0

यदि आपके डिवाइस कॉन्फ़िगरेशन फ़िक्स सेट है, तो कुछ थ्रेड लिखें जो आपके उदाहरण के रूप में उनमें से प्रत्येक को टाइमआउट से कनेक्ट करने का प्रयास करता है। अन्य सभी सेटअप (होस्ट/आईपी/पोर्ट डिटेक्शन) के लिए IMHO आपको एक डीएचसीपी सर्वर की आवश्यकता है क्योंकि शुद्ध जावा नेटवर्क परतों तक पहुंचने के लिए इसे साफ तरीके से नहीं करता है। – PeterMmm

0

टीसीपी/आईपी हैंडशेकिंग का एक तरीका है। इन 5 उपकरणों में से किसी के साथ कनेक्शन बनाने के लिए। आपके ग्राहक और प्राप्तकर्ता ग्राहक दोनों जीवित होना चाहिए। सबसे पहले यदि संभव हो तो सॉकेट एनआईओ का उपयोग करें। क्या आप क्लाइंट तर्क लिख सकते हैं कि जब भी कोई भी ग्राहक ऑनलाइन आता है तो पहले डेटाबेस में अपने आईपी और पोर्ट की प्रविष्टि करें और डेटाबेस से अन्य उपलब्ध आईपी और पोर्ट प्राप्त करने का प्रयास करें और उनके साथ कनेक्शन बनाने का प्रयास करें। जब भी कोई क्लाइंट डिवाइस पहुंच योग्य नहीं हो जाता है तो डेटाबेस से उस प्रविष्टि को हटा दें। उदाहरण: जब पहला डिवाइस ऑनलाइन आता है तो केवल एक सॉकेट बनाया जाएगा क्योंकि दूसरी डिवाइस ऑनलाइन आने पर डाटाबेस में केवल एक प्रविष्टि होती है, वहां दो प्रविष्टियां होती हैं, एक आईपी और इस डिवाइस का बंदरगाह होता है और दूसरी प्रविष्टि संबंधित होती है डिवाइस जो पहले आया था।

धन्यवाद सुनील कुमार साहू

+0

क्या यह अच्छा है? क्या मैं इसे रिले कर सकता हूं? सार्वजनिक बूलियन होस्ट उपलब्धता उपलब्धता() { बूलियन उपलब्ध = सत्य; { (नया सॉकेट (होस्ट, पोर्ट)) आज़माएं (बंद करें); } पकड़ें (अज्ञातहोस्ट एक्सेप्शन ई) { // अज्ञात होस्ट उपलब्ध = झूठा; } पकड़ें (IOException ई) { // आईओ अपवाद, सेवा शायद उपलब्ध नहीं है = झूठी; } उपलब्ध रिटर्न; } – michdraft

+0

हां, हमने इस तरह संभाला है –

संबंधित मुद्दे

 संबंधित मुद्दे