2012-03-04 5 views
19

मैं समझता हूं कि एक टीसीपी क्लाइंट सॉकेट क्लास के चारों ओर एक रैपर है, और टीसीपी क्लाइंट का उपयोग करते हुए मैं अंतर्निहित सॉकेट तक पहुंच सकता हूं, लेकिन रैपर वास्तव में क्या करता है?सीधे सॉकेट पर टीसीपी क्लाइंट का उपयोग करने के क्या फायदे हैं?

टीसीपी क्लाइंट का उपयोग करते समय मुझे कॉलिंग प्राप्त करने की आवश्यकता है() जैसे कि मैं सॉकेट के साथ करता हूं या रैपर सुनिश्चित करता है कि मेरा सभी डेटा दिखाई देता है?

अन्त में, मैं दोनों सर्वर और ग्राहक सॉकेट रैप करने के लिए

उत्तर

17

वास्तव में क्या आवरण क्या करता है (सर्वर पर मूल कनेक्शन स्वीकार करने TcpListener उपयोग करने के बाद) पर TcpClient उपयोग कर सकते हैं?

मुझे इसे एक उदाहरण के साथ समझाएं। आपके पास सी # File.ReadAllLines में एक विधि है। यह आपके लिए फाइल में सभी लाइनें पढ़ता है। अब आप FileStream कक्षा या किसी भी अन्य वर्ग के माध्यम से एक ही परिणाम प्राप्त कर सकते हैं जो फ़ाइल पढ़ता है .. लेकिन .. wrapper i.e. File.ReadAllLines, आपको कोड की कम लाइनों के साथ प्राप्त करने की अनुमति देता है। रैपर हमेशा TCPClient का उपयोग करते समय() की तरह मैं एक सॉकेट के साथ करते हैं या आवरण सुनिश्चित करता है मैं प्राप्त बुला रखने की जरूरत है सभी अपने डेटा दिखाई देता है निम्न स्तर विवरण

बाहर सार संक्षेप द्वारा उत्पादकता में वृद्धि?

TCPClient एक Receive विधि Socket की तरह नहीं है, लेकिन विचार एक ही है। आप

मैं दोनों सर्वर और ग्राहक पर TcpClient उपयोग कर सकते हैं सॉकेट रैप करने के लिए के लिए आप GetStream तरह तरीकों का उपयोग करने के लिए डेटा को पढ़ने के लिए यह रूप से प्रकट नहीं होगा

हाँ , आप सुरक्षित रूप से क्लाइंट और सर्वर दोनों पक्षों पर इसका उपयोग कर सकते हैं

+0

आह मैं देखता हूं। तो क्या मैं यह कहने में सही हूं कि _BeginReceive() के बाद, EndReceive(), बाइट्स स्टोर करें और सॉकेट पर संदेश प्राप्त होने तक BeginReceive() को याद करें, _myTcpClient.GetStream() का उपयोग करके किया जा सकता है। BeginRead() _ एक टीसीपी क्लाइंट पर? Will BeginRead() EndRead() कॉलबैक को कॉल नहीं करेगा जब तक निर्दिष्ट बाइट्स की निर्दिष्ट संख्या वास्तव में प्राप्त नहीं हुई है? (सभी अपेक्षित बाइट प्राप्त होने तक BeginRead()/BeginReceive() को लगातार कॉल करने की आवश्यकता को हटाते हुए) – Dermot

+1

मैं 'BeginRead' और 'EndRead' के बजाय' नेटवर्कस्ट्रीम 'वर्ग के' रीड 'और' लिखें 'विधियों का उपयोग करना पसंद करूंगा क्योंकि आपको स्पष्ट रूप से 'BeginRead' और' EndRead' 'को कॉल करने की आवश्यकता नहीं होगी, रैपर आपके लिए यह करेगा। इंटरनेट पर कुछ नमूने देखें जैसे http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.getstream.aspx –

+0

मेरे लिए यह स्पष्ट करने के लिए धन्यवाद। – Dermot