2010-11-06 9 views
5

मैं सी तेज का उपयोग कर क्लाइंट सर्वर एप्लिकेशन बना रहा हूं। सर्वर निश्चित पोर्ट नंबर के साथ tcplistener का उपयोग कर रहा है। क्लाइंट tcpclient का उपयोग कर सर्वर से कनेक्ट करें। एक बार कनेक्ट होने पर, क्लाइंट और सर्वर दोनों इस कनेक्शन का उपयोग करके संवाद करते हैं। एप्लिकेशन फिर संदेश भेजने और प्राप्त करने के लिए नया udp कनेक्शन बनाते हैं। चूंकि सर्वर एकल क्लाइंट से एकाधिक कनेक्शन स्वीकार करने का मानता है, इसलिए मुझे अलग-अलग पोर्ट के साथ प्रत्येक कनेक्शन को अलग करना होगा। ऐसा करने के लिए, मुझे पहले 1. सर्वर पर, एक udpclient बनाएं (स्वचालित रूप से सर्वर पर अप्रयुक्त udp पोर्ट का उपयोग करें)। 2. क्लाइंट को सर्वर udpclient द्वारा उपयोग किया गया पोर्ट नंबर भेजता है। 3. क्लाइंट निर्दिष्ट पोर्ट नंबर का उपयोग कर सर्वर पर डेटा भेजता है।सी # UdpClient द्वारा उपयोग किए गए पोर्ट नंबर को कैसे जानें?

समस्या यह है कि कैसे एक udpclient बनाने के लिए जहां आप पोर्ट नंबर का उपयोग कर सकते हैं?

उत्तर

12

यहाँ मेरे सवालों का जवाब कर रहे हैं।

UdpClient udpClient = new UdpClient(0)); 
Console.WriteLine("UDP port : " + ((IPEndPoint)udpClient.Client.LocalEndPoint).Port.ToString()); 

0 ctor पैरामीटर स्वचालित रूप से मुक्त udp पोर्ट को खोजने के लिए ऐप सेट करता है। पोर्ट नंबर खोजने के लिए ((IPEndPoint)udpClient.Client.LocalEndPoint)).Port.ToString() का उपयोग किया जाता है।

+0

अफसोस की बात है, कम से कम .NET 4.0 में, सिस्टम कभी भी यूडीपी सॉकेट के पोर्ट फ़ील्ड को सेट नहीं करता है। और चूंकि यह केवल एकमात्र संपत्ति है, इसलिए आप इसे मैन्युअल रूप से सेट नहीं कर सकते हैं। –

+0

ओओपीएस। मुझे यह कहना चाहिए था: जब आप बांधते हैं तो सिस्टम रॉ यूडीपी सॉकेट पर पोर्ट सेट नहीं करता है। यह डीजीआरएएम सॉकेट पर करता है। –

0

मुझे लगता है कि आप अपने लक्ष्य को प्राप्त करने के लिए सर्वर पक्ष पर UdpClient का उपयोग नहीं कर सकते हैं, क्योंकि इसमें आईपीईंडपॉइंट से जुड़ने के लिए बाइंड विधि नहीं है।

आपको ऐसा करने के लिए सॉकेट ऑब्जेक्ट का उपयोग करना चाहिए, जो आने वाले यूडीपी संदेशों के लिए पोर्ट की निगरानी करने की अनुमति देता है। तो इसमें कोई संदेह नहीं है कि आप उस ग्राहक को बता सकते हैं जो सर्वर मॉनीटर करता है।

2

मेरा मानना ​​है कि आप Socket.RemoteEndPoint संपत्ति का उपयोग कर सकते हैं यह जानने के लिए कि सर्वर से जुड़े क्लाइंट का आईपी/पोर्ट क्या है (आप अपने स्थानीय आईपी/पोर्ट को जानते हैं क्योंकि आपने उस बंदरगाह पर सॉकेट शुरू किया है, लेकिन यह भी उपलब्ध है LocalEndPoint संपत्ति।

इसके अलावा constru के रूप में कैसे UdpClient ठीक से उपयोग करने पर एक सरल उदाहरण के लिए MSDN UdpClient देखते हैं।

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