2012-12-04 10 views
5

मैं बंदरगाहों के लिए जावा एसबीबीआई लाइब्रेरी का उपयोग कर रहा हूं। लेकिन मेरा राउटर दूसरे राउटर, पर समझा जाता है, इसलिए पहले राउटर का बाहरी आईपी एक आईपी है जो दूसरे राउटर डीएचसीपी द्वारा दिया गया था। क्या दूसरे राउटर पर बंदरगाहों को आगे बढ़ाने का कोई तरीका है? यहाँ मेरी कोड है:राउटर के दो स्तरों के माध्यम से आगे के बंदरगाहों को ऊपर कैसे बढ़ाएं

InternetGatewayDevice[] devices=InternetGatewayDevice.getDevices(1000); 
System.out.println("Found "+devices.length+" Devices"); 
InternetGatewayDevice dev = devices[ 0 ]; 
System.out.println(dev); 
System.out.println("External IP = " + dev.getExternalIPAddress()); 

System.out.println(dev.addPortMapping("Streamternet", "TCP", null, 1333, 
             "192.168.0.105", 8888, 0)); 

System.out.println("waiting for connection"); 
HTTPServer.main(null); 

उत्तर

2

जहाँ तक मुझे पता के रूप में यह अपने मौजूदा सेटअप के साथ संभव नहीं है, क्योंकि आप अपने रूटर के प्रवेश द्वार सीधे उपयोग नहीं कर सकते।

ऐसे 2 समाधान हैं जिन पर मैं सोच सकता हूं। इतना है कि वह और आप सभी दूसरे रूटर से और की तुलना में आप सभी एक ही सबनेट होगा और आप रूटर में से हर एक का उपयोग कर सकता है आपके आईपी मिल जाएगा

  1. अपने रूटर DHCP सर्वर अक्षम करें।
  2. एक और पीसी है जो दूसरे राउटर नेटवर्क से जुड़ा हुआ है और उसे एक सर्वर बनाता है जो आपके आदेशों को सुनता है और यह सर्वर आपके लिए यूपीएनपी कार्यों को निष्पादित करेगा। (इसे शायद पोर्ट अग्रेषण के मैन्युअल सेटअप की आवश्यकता होगी)

आशा है कि मैं मदद कर सकता हूं।

+0

इस है एक विकल्प नहीं ... मैं एक सॉफ्टवेयर विकसित कर रहा हूँ, मैं नहीं कर सकते बता मेरी उपयोगकर्ताओं के लिए यह – Dima

+0

हो सकता है आप मुझे इस के साथ मदद कर सकते हैं करना है? http://stackoverflow.com/questions/16092747/java-sbbi-upnp-cant-find-internet-gateway-device- कभी-कभी – Dima

+0

आप कैसे सुनिश्चित हैं कि आपके उपयोगकर्ताओं के पास एक दूसरे के बाद 2 राउटर हैं? – Danpe

3

जैसा कि @ डैनपे ने अपने उत्तर में कहा था, यूपीएनपी आपको कई एनएटी के पीछे होने पर बंदरगाहों को खोलने नहीं देगा।

मैं भी एक पी 2 पी सॉफ्टवेयर पर काम कर रहा हूँ के रूप में और मैं क्या एकत्रित की हैं से, यहाँ एक दो साथियों कनेक्ट करने का प्रयास कर सकते हैं क्या है:

  1. कनेक्ट TCP या UDP hole punching का उपयोग कर।
  2. यदि ऊपर काम नहीं करता है, तो दोनों तरफ रूटर में से एक Symmetric NAT का उपयोग करता है। यूपीएनपी या एनएटी-पीएनपी आज़माएं।
  3. यदि ऊपर काम नहीं करता है, तो ऐप या तो राउटर के पीछे है जो यूपीएनपी, एनएटी-पीएनपी का समर्थन नहीं करता है ... या आप एनएटी के कई स्तरों के पीछे हैं। अब आप या तो:

    1. ऐप के उपयोगकर्ता के साथ संवाद करें कि उन्हें उन राउटर पर बंदरगाहों को खोलने की आवश्यकता है। जैसा कि आपने टिप्पणियों में उल्लेख किया है, एक दुर्भाग्यपूर्ण समाधान है क्योंकि यह उपयोगकर्ता से उन्नत तकनीकी ज्ञान मानता है। लेकिन ऐसा लगता है कि कुछ कंपनियां वास्तव में क्या करती हैं। उदाहरण के लिए here देखें।

    2. TURN protocol का उपयोग कर एक रिले सर्वर का उपयोग करें जिसके माध्यम से बंद बंदरगाह वाले उपयोगकर्ता संवाद करेंगे। यह रिले सर्वर एक या अधिक सहकर्मी हो सकता है जिनके बंदरगाह खुले हैं (जैसा कि यूटोरेंट के मामले में है), या यह आपका सर्वर हो सकता है, या दोनों का संयोजन हो सकता है: यदि खुले बंदरगाह वाले सहकर्मी हैं, तो उनका उपयोग करें, अन्यथा उपयोग करें आपका स्वयं का सर्वर (यह स्काइप के साथ मामला है)।

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