मैं अपने एक्सएनए-नेटवर्कगाम के लिए यूडीपी-सॉकेट का उपयोग करना चाहता हूं। और अब मैं एक विश्वसनीय श्रोता प्रकाशित करने की कोशिश कर रहा हूं, लेकिन कुछ समस्याएं हैं।सी #: यूडीपी श्रोता थ्रेड
यदि मैं सॉकेट का उपयोग करता हूं। पुनः प्राप्त करें यह एक पैकेट तक इंतजार करेगा। यह मेरे श्रोता के लिए ठीक है। मेरे धागा इस तरह थोड़ी देर के पाश है:
while(Listen == true)
{
socket.Receive(...);
}
लेकिन अगर मैं (अगर मैं सुन बंद करना चाहते हैं) को गलत पर सुनो-ध्वज स्वैप, यह पिछले .Receive में फंस जाएगा()।
फिर मैंने मेथोड्स को देखा .बिनर रिसीव()। यदि एक पैकेट पहुंचा तो यह मेथोड को कॉल करेगा। लेकिन डेटा प्राप्त करने के लिए मुझे उपयोग करना होगा। EndReceive() और यही वह बिंदु है जिसमें मुझे कोई समस्या है। मैं अभी भी पैकेट के लिए सुनना चाहता हूं और एक पैकेट आने पर सुनना बंद नहीं करना चाहता हूं।
तो मैं अभी भी "रिसीविव()" के साथ अवरुद्ध संस्करण का उपयोग करता हूं। मैं सुनकर धागे को कॉल करके रद्द कर सकता हूं: Thread.abort(), लेकिन यह अच्छा नहीं है।
वर्तमान में मैं का परीक्षण करता है, तो डेटा उपलब्ध है:
while(Listen == true)
{
if(socket.Available > 0)
{
socket.Receive(...);
}
}
लेकिन मुझे लगता है यह सबसे अच्छा तरीका नहीं है ... तो शीघ्र ही अगर-खंड एक अन्य धागा socket.Receive बुला रहा है (के बाद ..) यह फिर से अनजान अटक जाएगा। क्या रद्द करने का कोई तरीका नहीं है। .. (विधि) विधि? मैंने टाइमआउट सेट करने का प्रयास किया, लेकिन अगर। बार-बार टाइमआउट, यह एक अपवाद फेंक देगा ...
मुझे एक साधारण उद-सुनना धागा चाहिए, मैं कृपा से रुक सकता हूं। :-) एमएसडीएन में मुझे एक श्रोता-उदाहरण नहीं मिला जो एक से अधिक पैकेट के लिए सुन रहा है। अन्य प्रोग्रामर को कैसे संभालते हैं?
"अगर शीघ्र ही अगर-खंड के बाद एक अन्य धागा socket.Receive (..) बुला रहा है" - यह मतलब है एक से अधिक थ्रेड एक ही सॉकेट से पढ़ने देखते हैं कि लगता है? – Ragoczy
नहीं, मैं ऐसा नहीं करता हूं। लेकिन यह संभव है और मैं इससे बचना चाहता हूं :-) – user437899
जब आप सुनना बंद करने के लिए तैयार हों, तो सॉकेट बंद करें। अवरुद्ध 'प्राप्त करें() 'विधि' सॉकेटएक्सप्शन 'के साथ बाहर निकल जाएगी जिसे आपको पकड़ने की आवश्यकता होगी। –