यहां कुंजी शब्द (without closing the socket properly)
है।
सॉकेट हमेशा हासिल कर ली जानी चाहिए और का निपटारा इस तरह से:
final Socket socket = ...; // connect code
try
{
use(socket); // use socket
}
finally
{
socket.close(); // dispose
}
यहां तक कि इस सावधानियों आप आवेदन की समय समाप्ति, अपने प्रोटोकॉल के लिए विशिष्ट निर्दिष्ट करना चाहिए साथ
।
मेरा अनुभव दिखाया गया था, दुर्भाग्य से आप किसी भी सॉकेट टाइमआउट कार्यक्षमता का विश्वसनीय रूप से उपयोग नहीं कर सकते हैं (उदाहरण के लिए लिखने के संचालन के लिए कोई टाइमआउट नहीं है और यहां तक कि पढ़ना भी ऑपरेशन कभी-कभी, हमेशा के लिए लटका सकता है)।
है यही कारण है कि आप एक निगरानी धागा है कि आपके आवेदन समय समाप्ति को लागू करता है सॉकेट कि थोड़ी देर के लिए उत्तर नहीं दे रहा है की disposes की जरूरत है।
ऐसा करने का एक सुविधाजनक तरीका जावा.एनओ में संबंधित चैनलों के माध्यम से सॉकेट और सर्वर सॉकेट को प्रारंभ करना है। ऐसे सॉकेट का मुख्य लाभ यह है कि वे इंटरप्टिबल हैं, इस तरह आप आसानी से थ्रेड को बाधित कर सकते हैं जो सॉकेट प्रोटोकॉल करता है और सुनिश्चित करें कि सॉकेट ठीक से डिस्पोजेड हो गया है।
सूचना है कि आप दोनों पक्षों पर आवेदन समय समाप्ति को लागू करना चाहिए, के रूप में यह समय और दुर्भाग्य से जब आप अनुत्तरदायी सॉकेट अनुभव हो सकता है का केवल एक मामला है।
स्रोत
2010-06-30 00:03:53
मैंने पहले ही सॉकेट को लिखकर इसका उपयोग करने की कोशिश की है और फिर भी मुझे नहीं पता कि क्लाइंट डिस्कनेक्ट हो गया है या नहीं। – erotsppa