में एक लैन में गतिशील रूप से अन्य होस्ट ढूंढें कुछ समय पहले मैंने थोड़ा लैन चैट ऐप विकसित किया था। जावा में जो अन्य होस्टों के साथ चैट करने, इमेज भेजने इत्यादि की इजाजत देता है। हालांकि यह सिर्फ मजेदार के लिए बनाया गया था, अब इसका इस्तेमाल किया जा रहा है जहां मैं काम करता हूं।जावा
वर्तमान में, ऐप पर "चैट सर्वर" कोई नहीं है। जहां प्रत्येक ग्राहक पंजीकृत होता है, इसकी स्थिति अपडेट करता है, आदि (मुझे सममित डिजाइन का विचार पसंद आया और किसी अन्य मशीन पर चल रहे सर्वर के आधार पर नहीं)।
इसके बजाय, प्रत्येक मेजबान जो एक hosts.properties अन्य सेनाओं के होस्ट नाम के साथ फ़ाइल है एक क्लाइंट/सर्वर है, और - उदाहरण के लिए - जब भेजने उनमें से हर एक के लिए एक बड़े पैमाने पर प्रसारण संदेश/छवि/जो कुछ भी ।
शुरुआत में केवल कुछ मेजबान थे, इसलिए यह host.properties फ़ाइल कोई समस्या नहीं थी। लेकिन चूंकि उपयोगकर्ताओं की संख्या में वृद्धि हुई, उस फ़ाइल को अपडेट करने की आवश्यकता थोड़ा मुश्किल थी। तो अब मैंने इसे छुटकारा पाने का फैसला किया है, और हर बार ऐप। शुरू होता है, अन्य सक्रिय मेजबान गतिशील रूप से पाते हैं।
हालांकि, मुझे इसे लागू करने का सही तरीका नहीं मिल रहा है। मैंने अलग-अलग थ्रेड शुरू करने का प्रयास किया है, उनमें से प्रत्येक आईपी पते की एक ज्ञात श्रृंखला में अन्य होस्टों की तलाश में है। कुछ इस तरह (पठनीयता के कारण सरलीकृत):
/** HostsLocator */
public static void searchForHosts(boolean waitToEnd) {
for (int i=0; i < MAX_IP; i+= MAX_IP/threads) {
HostsLocator detector = new HostsLocator(i, i+(MAX_IP/threads - 1)); // range: from - to
new Thread(detector).start();
}
}
public void run() {
for (int i=from; i<=to; i++)
findHosts(maskAddress + Integer.toString(i));
}
public static boolean findHosts(String IP) {
InetAddress address = InetAddress.getByName(IP);
if (address.isReachable(CONNECTION_TIME_OUT))
// host found!
}
हालांकि:
- किसी एकल थ्रेड और CONNECTION_TIME_OUT (500ms) में एक कम मूल्य मैं गलत के साथ होस्ट नहीं मिला मेजबानों के लिए स्थिति वास्तव में सक्रिय है।
- CONNECTION_TIME_OUT (5000ms) और केवल एक एकल थ्रेड में एक उच्च मूल्य के साथ समाप्त करने के लिए कई धागे के साथ
- हमेशा के लिए ले जाता है मैं भी टकराव के कारण पहले एक तरह इसी तरह की समस्याओं, मिल गया है।
तो ... मुझे लगता है कि इस समस्या को हल करने का एक बेहतर तरीका है लेकिन मुझे यह नहीं मिला। कोई सलाह? धन्यवाद!
भी http://stackoverflow.com/questions/1233204 देखें – trashgod
आप परियोजना "गुस्सा आईपी स्कैनर" स्रोत फोर्ज में के लिए स्रोत कोड की जांच कर सकता पर नज़र रखना। http://www.angryip.org/w/ विकास –