को बाधित करें मेरे पास कनेक्ट करने के लिए सर्वर की एक सूची के साथ एक जीयूआई है। यदि कोई उपयोगकर्ता किसी सर्वर पर क्लिक करता है तो यह उससे जुड़ता है। यदि कोई उपयोगकर्ता दूसरे सर्वर पर क्लिक करता है, तो यह पहले डिस्कनेक्ट करेगा और दूसरे से कनेक्ट होगा। प्रत्येक नया कनेक्शन एक नए धागे में चलता है ताकि प्रोग्राम अन्य कार्यों को कर सके।एक कनेक्टिंग सॉकेट
हालांकि, यदि उपयोगकर्ता पहले से कनेक्ट होने पर दूसरे सर्वर पर क्लिक करता है, तो दो एक साथ कनेक्शन होते हैं।
Socket socket = new Socket();
socket.connect(socketAddress, connectTimeout);
मैंने सोचा कि शायद Thread.currentThread().interrupt();
काम करेगा, लेकिन नहीं किया:
मैं इस का उपयोग कर जोड़ने रहा हूँ, और कनेक्ट() लाइन ब्लॉक है।
क्या मुझे अपने कोड को थोड़ा सा पुनर्गठन करना है ताकि यह पहला कनेक्शन बना रहा हो, लेकिन इसे सीधे बंद कर दिया जाए? या वास्तव में कनेक्ट विधि को बाधित करने का एक तरीका है।
जब मैं socket.close() की कोशिश है, यह कहना है कि सॉकेट रिक्त है .. लेकिन यह होना चाहिए एक वैध (कनेक्ट नहीं किए गए) सॉकेट ऑब्जेक्ट। मैं डिस्कनेक्ट() नामक विधि के अंदर एक ही रननेबल क्लास में क्लोज़() को कॉल कर रहा हूं, जिसे किसी अन्य धागे द्वारा बुलाया जाता है, यही कारण है? क्या बंद() को सॉकेट पर सीधे एक अलग धागे से बुलाया जाना चाहिए? – Matt
@ मैट: कोड को देखने के बिना बताना मुश्किल होगा लेकिन पुष्टि करना चाहता था; सॉकेट वैरिएबल और इंस्टेंस वैरिएबल या एक विधि स्कॉप्ड है? क्या आप सुनिश्चित हैं कि रननेबल कार्य की 'सॉकेट' विशेषता गैर-शून्य है? यदि हां, तो क्या आप कार्य ऑब्जेक्ट में सॉकेट चर 'volatile' बनाने का प्रयास कर सकते हैं और पुनः प्रयास करें? क्या यह अभी भी असफल रहा है? –