2012-02-07 23 views
5

मैं कुछ इस तरह करते हैं:Unsureness()

byte[] buffer = new byte[1024]; 
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
IPEndPoint remote = new IPEndPoint(IPAddress.Parse("12.34.56.78"), 1337); 
sock.ReceiveFrom(buffer, ref remote); 

ReceiveFrom विधि केवल endpoint है कि होने से रोकने के पैकेट प्राप्त होगा? प्रलेखन राज्यों निम्नलिखित:

संयोजन प्रोटोकॉल के साथ

, ReceiveFrom स्थानीय नेटवर्क बफर में प्राप्त पहले कतारबद्ध आंकड़ारेख पढ़ा जाएगा।

क्या इसका मतलब यह है कि पास किया गया एंडपॉइंट केवल मेजबान के एंडपॉइंट को संग्रहीत करने के लिए उपयोग किया जाता है, पैकेट आया है और प्राप्तकर्ता से विधि के व्यवहार को प्रभावित नहीं करता है? यदि हां, तो इसे "आउट" के बजाय "रेफरी" के रूप में पारित करने की आवश्यकता क्यों है?

+0

कई परीक्षण करने के बाद मुझे पता चला है कि पारित अंत बिंदु का मूल्य कोई फर्क नहीं पड़ता। यह केवल भंडारण के लिए प्रयोग किया जाता है। लेकिन मुझे अभी भी पता नहीं है कि इसे संदर्भ के रूप में क्यों पारित किया जाना है। – haiyyu

+0

एक एंड्रॉइंट एक स्ट्रक्चर नहीं है? – Joshua

+0

हाँ, आप सही हैं। हालांकि इससे मेरे मामले में कोई फर्क नहीं पड़ता है। – haiyyu

उत्तर

1

ध्यान दें कि ReceiveFrom विधि recvfrom WinSock फ़ंक्शन के लिए एक प्रबंधित रैपर है। यह फ़ंक्शन sockaddr संरचना के लिए एक सूचक लेता है जो कॉलर पक्ष पर वैकल्पिक और आवंटित/अस्वीकृत है।

इसे ध्यान में रखते

मैं कुछ सिद्धांतों क्यों EndPointref के रूप में पारित किया और out नहीं है:

  1. शायद के लिए WinSock के साथ संगति से काम EndPoint कॉल करने वाले को आवंटित किया जाता है और इसलिए ref से पारित कर दिया।
  2. शायद EndPoint किसी बिंदु पर एक वैकल्पिक पैरामीटर माना जाता था, लेकिन इसे कभी लागू नहीं किया गया था (मैंने जांच की है, यह गैर-शून्य होना चाहिए)।
  3. शायद कुछ प्रोटोकॉल के लिए EndPoint पैरामीटर के माध्यम से प्रसंस्करण दिशाएं पारित की गई हैं। शायद भविष्य के प्रोटोकॉल भी :-)

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^