प्राप्त और भेजता है मैं सी # में 'सॉकेटएसिंसेन्ट आर्ट्स' वर्ग को समझने की कोशिश कर रहा हूं। http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspxसी # सॉकेटएसिंसेन्ट आर्ट्स हैंडलिंग डेटा
मैं इस ट्यूटोरियल अनुसरण कर रही हूं: http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
अब मैं कैसे मैं वास्तव में अपने सर्वर के साथ डेटा की प्रक्रिया चाहिए में फंस कर रहा हूँ। मैं जो करने की कोशिश कर रहा हूं वह एक कनेक्टेड क्लाइंट के लिए सॉकेटएसिंसेन्ट आर्ग्स का उपयोग है जो बफरमेनगर में 512 बाइट्स के आवंटित बफर स्पेस के साथ है। तो मैं क्या करना चाहता हूं बाइट [] डेटा को अपनी खुद की कस्टम क्लास (क्लाइंटपैकेट) में डीकोड करना है जो बाइट [] को डीकोडिंग और पढ़ने के लिए रखता है।
यह सब कुछ ठीक है लेकिन अपने सर्वर हमेशा सवाल डेटा के साथ प्रतिक्रिया नहीं करता है:
मैं 1 प्राप्त करने और पाश के लिए SocketAsyncEventArgs का उपयोग चारों ओर, डेटा प्राप्त तो पूल जब भी से एक SocketAsyncEventArgs आवंटित कार्रवाई करने के लिए करते हैं मुझे इसे भेजने पर वापस लौटने की जरूरत है?
और रीडिंग पूर्ण होने पर सॉकेटएसिंसेन्ट आर्ट्स को कैसे पता चलता है? (जब यह बाइट [] बफर के साथ समाप्त हो जाता है, इससे पहले कि यह नए डेटा के साथ ओवर-लिखता है) जैसे कि अगर मैं वापस जवाब नहीं देता तो पूल में यह कैसे लौटाया जाता है?
आपने इसे एक नए बाइट [] पर सेट करके कहा, लेकिन मैं सभी सॉकेटएसिंसेन्ट आर्ट्स में एक बड़ा बफर ब्लॉक साझा कर रहा हूं, अगर मैं एक पैकेट में उस बफर ब्लॉक से पढ़ता हूं तो बफर ब्लॉक अगले आने वाले द्वारा ओवर-लिखित हो सकता है डेटा, भले ही मैं बाइट [] सरणी की प्रतिलिपि बनाता हूं, यह डेटा भेजने/प्राप्त करने के लिए बफर ब्लॉक का उपयोग करने जा रहा है? साथ ही जब मैं किसी भी समय एक ऑपरेशन हो सकता है तो मैं उसी ऑब्जेक्ट के साथ डेटा कैसे भेजूं? –
आप 2 मशीनों के बीच एक एकल सॉकेट कनेक्शन मानते हैं। कई समवर्ती कनेक्शनों को संभालने के दौरान आप केवल एक ही सॉकेटएसिंसेन्ट आर्ग का पुन: उपयोग नहीं कर सकते हैं, जो मुझे लगता है कि सवाल क्या था। (और यही है जो सॉकेटएसिंसेन्ट आर्ट्स के लिए बनाया गया है)। –
धन्यवाद SonOfPirate, यह शानदार होगा अगर आप बड़ी मात्रा में डेटा प्राप्त करने के बारे में विस्तार से बता सकते हैं। विशेष रूप से स्पष्ट करें अगर मुझे अंत तक पहुंचने से पहले प्रत्येक बार ReceiveAsync को फिर से कॉल करना होगा; या फ्रेमवर्क मेरे लिए यह करेगा? –