2012-07-13 26 views
6

में एक इंटरफेस बांधें मेरे पास सौरलिस होस्ट में दो इंटरफेस हैं। मैं चित्र में दिखाए गए दोनों इंटरफ़ेस के माध्यम से एक एकल टीसीपी सर्वर पर दो टीसीपी कनेक्शन शुरू करना चाहता हूं। क्या स्थानीय रूटिंग तालिका को ओवरराइड करने के लिए इंटरफ़ेस को टीसीपी सॉकेट में बाध्य करने के लिए जावा में कोई विकल्प हैं?जावा टीसीपी कनेक्शन

मैं नेटवर्क आरेख संलग्न कर रहा हूँ,

network_diagram

मैं सर्वर से डेटा प्राप्त करने के लिए दोनों धारावाहिक लिंक बैंडविड्थ का उपयोग करना चाहते हैं। इसलिए मैं दोनों इंटरफेस पर कनेक्शन शुरू करना चाहता हूं।

धन्यवाद,

+0

दुर्भाग्य से, मैं नेटवर्क आरेख यहां संलग्न करने में सक्षम नहीं कर सकते हैं। मेरी बड़ी समस्या यह है कि मेरे पास दो राउटर से जुड़े दो धारावाहिक लिंक हैं। और दो राउटर अलग से मेरे मेजबान से जुड़े हुए हैं। और मैं दो इंटरफेस के माध्यम से दो अलग-अलग कनेक्शन शुरू करना चाहता हूं। – Mohan

+0

इसे कहीं और अपलोड करें और इसे लिंक करें, आपके आरेख के बिना सही जवाब देना मुश्किल है। –

+0

तस्वीर से लिंक करें - http://uploadpic.org/v.php?img=vSckl9f6Ze – Mohan

उत्तर

7

आप

Socket s = new Socket(hostname, port, localInterface, 0); 

उपयोग कर सकते हैं हालांकि, कई OSes इस "संकेत" का सम्मान नहीं है और वैसे भी अनुमार्गण तालिका का उपयोग करेगा।

+0

ठीक है, तो, मूल रूप से यह "रजिस्टर" कीवर्ड की तरह है। ओएस इस इंटरफ़ेस के साथ सॉकेट को बांधने या डिफ़ॉल्ट इंटरफ़ेस से जुड़ने के लिए स्वतंत्र है। यदि यह विभिन्न इंटरफ़ेस से जुड़ता है, तो मेरा आवेदन काम नहीं करेगा। क्या सॉकेट चैनेल में कोई अबास्ट्रक्शन उपलब्ध है? – Mohan

+0

मैंने लिनक्स में "SO_BINDTODEVICE" जैसे कुछ पढ़ा। लेकिन जावा में सॉकेटचैनलोप्शन कक्षा में "SO_BINDTODEVICE" नहीं है। – Mohan

+0

http://en.wikipedia.org/wiki/Host_model लिनक्स आमतौर पर कमजोर होस्ट किया जाता है और यह अनदेखा करेगा कि आप किस सॉफ़्टवेयर को सॉकेट से बांधते हैं। –

1

आप कुछ इस तरह का मतलब है:

Socket socket1 = new Socket(); 
socket1.bind(new InetSocketAddress("10.1.1.1", port)); 
socket1.connect(new InetSocketAddress("10.1.3.1", port)); 

Socket socket2 = new Socket(); 
socket2.bind(new InetSocketAddress("10.1.2.1", port)); 
socket2.connect(new InetSocketAddress("10.1.3.1", port); 
+0

नहीं। उपरोक्त कोड इंटरफ़ेस का बिल्कुल उपयोग नहीं करते हैं और हमेशा आपका सॉकेट 1 और सॉकेट 2 डिफ़ॉल्ट इंटरफ़ेस से जुड़ जाएगा। – Mohan

+0

क्षमा करें, उपर्युक्त है जो मैं प्राप्त करने का प्रयास करता हूं .. लेकिन उपरोक्त डिफ़ॉल्ट इंटरफ़ेस से कनेक्ट होगा जो अंतर्निहित डिफ़ॉल्ट रूटिंग तालिका का उपयोग करेगा। डिफ़ॉल्ट राउटिंग मानना ​​राउटर बी के माध्यम से है, हालांकि मैं सर्वर के लिए दो सॉकेट कनेक्शन स्थापित करता हूं, मैं एक ही लिंक के माध्यम से जा रहा हूं। इसलिए, यदि मैं इंटरफ़ेस eth1 का उपयोग करने के लिए सॉकेट कहता हूं, तो मैं डिफ़ॉल्ट रूटिंग को बाईपास कर सकता हूं और दो सॉकेट के लिए दो अलग-अलग लिंक का उपयोग कर सकता हूं। – Mohan

+1

असल में, यह काम करता है! – Mohan

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

  • कोई संबंधित समस्या नहीं^_^