2011-10-20 8 views
5

अपने आवेदन में एक धागा जो हमेशा चल रहा हो और भेजने या कुछ बंदरगाह को सुनने की जाएगी।जावा कोड में डेटाग्राम सॉकेट के लिए पुन: उपयोग पता विकल्प कैसे सेट करें?

यह आवेदन पृष्ठभूमि में चलता है। कभी-कभी सॉकेट बनाने के दौरान, मैंने पाया कि बंदरगाह जो पहले उसी धागे द्वारा उपयोग किया गया था, सॉकेट के करीब() पर जारी नहीं किया जा रहा है। इसलिए मैंने इस

 dc = new DatagramSocket(inetAddr); 
     dc.setReuseAddress(true); 

समस्या की कोशिश की, यह दूसरी पंक्ति तक भी नहीं पहुंच रहा है। पहली पंक्ति में मुझे एक्सपेटेशन BindException: Address already in use मिल रहा है।

किसी कृपया मेरी मदद कर सकते कैसे संभाल करने के लिए इस स्थिति है।

वहाँ बंदरगाह जारी करने के लिए कोई तरीका है?

धन्यवाद & सादर,
SSuman185

+0

देखो। धन्यवाद। – user370305

उत्तर

6

एक MulticastSocket का प्रयोग करें। इसे कोई तर्क के साथ निर्मित करें। वह निश्चित रूप से setReuseAddress (सत्य) कहते हैं। फिर बांधें()।

पल आप setReuseAddress (बुला रहे हैं पर

) बहुत देर हो चुकी यह किसी भी अच्छा करने के लिए के लिए।

+0

+1, अपना उत्तर साझा करने के लिए। – user370305

+0

मैंने कोशिश की, लेकिन संदेह हो गया? मैंने देखा कि जब मैं आउट पैरामीटर के साथ डेटाग्राम सॉकेट() बना देता हूं, तो यह कुछ मुफ्त पोर्ट नंबर से जुड़ जाता है। पुन: उपयोग पता लगाने और बांधने के बाद, नए बंदरगाह से बंधेगा। पुराने बंदरगाह के साथ क्या होता है? – Suman

+0

@ एसएसयूएमएन 185 सही, अच्छी तरह से देखा गया। आपको मल्टीकास्ट सॉकेट बनाना होगा। आप इसे डेटाग्राम सॉकेट के समान उपयोग कर सकते हैं, जिसका डिफ़ॉल्ट कन्स्ट्रक्टर लगभग 15 साल पहले गलत तरीके से डिज़ाइन किया गया था। – EJP

11

DatagramSocket(inetAddr) बंदरगाह को बांधता है। बाध्य होने से पहले आपको setReuseAddress(true) की आवश्यकता है।

dc = new DatagramSocket(null); 
dc.setReuseAddress(true); 
dc.bind(inetAddr); 

यह निर्माता बंदरगाह अनबाउंड छोड़ देता है:

ऐसा करने के लिए ... निम्नलिखित का उपयोग करें।

+0

और inetAddr यहां दर्शाता है? !! –

0

यह है कि यह कैसे मेरे लिए काम किया है: मेरे संपादित जवाब में

try { 
     clientMulticastSocket = new MulticastSocket(null); 
     clientMulticastSocket.setReuseAddress(true); 
     clientMulticastSocket.bind(new InetSocketAddress(multicastHostAddress, multicastPort)); 
     clientMulticastSocket.joinGroup(multicastHostAddress); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return false; 
    } 
संबंधित मुद्दे