2012-11-26 12 views
6

आप मल्टीकास्ट यूडीपी पैकेट के प्रेषक का आईपी कैसे प्राप्त करते हैं? वर्तमान कोड एक तुल्यकालिक/अवरुद्ध तरीके से स्थापित है (नीचे नोट देखें)। जैसे मेरी कोड नहीं है, यह सवाल चैट से आता है:मल्टीकास्ट पैकेट से प्रेषक आईपी प्राप्त करें

private void receive() 
    { 
     string mcastGroup = SetMcastGroup(); 
     s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     s.EnableBroadcast = true; 
     IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000); 
     s.Bind(ipep); 
     IPAddress ip = IPAddress.Parse(mcastGroup); 
     s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, IPAddress.Any)); 

     while (true) 
     { 
      try 
      { 
       byte[] b = new byte[4096]; 
       s.Receive(b); 
       string str = Encoding.ASCII.GetString(b, 0, b.Length); 
       //this.SetText(ipep.Address + ": " + str.Trim()); 
       this.SetText(senderIP() + ": " + str.Trim()); 
      } 
      catch{} 
     } 
    } 

नोट: यहाँ कोड है। मैं केवल इसलिए पूछ रहा हूं क्योंकि मैं समस्या को समझता हूं।

+0

के बजाय इस कॉल receiveFrom ऐसा करने के लिए कृपया कभी एक खाली 'पकड़ {}' प्रयोग नहीं करते। यह केवल त्रुटियों को मुखौटा करता है और समस्याओं को पहचानना अधिक कठिन बनाता है। यदि आप किसी विशिष्ट अपवाद को अनदेखा करने का प्रयास कर रहे हैं, तो उस विशिष्ट प्रकार के लिए ऐसा करें (उदाहरण के लिए 'पकड़ें फ़ाइल नॉटफाउंड एक्स्केटन {} ') –

+2

@ जोनाथन रेनहार्ट ने क्या आपने मेरे बारे में टिप्पणी पढ़ी है कि यह मेरा कोड * श्वास * –

+4

नहीं है, मैं इसे खोने के लिए क्षमा चाहता हूं । हालांकि, मैं इसे "फ्लेमिंग" नहीं कहूंगा, मैं इसे "रचनात्मक सुझाव" कहूंगा। –

उत्तर

3

चूंकि आप यूडीपी का उपयोग कर रहे हैं, इसलिए आप रिमोट एंडपॉइंट के साथ कनेक्शन स्थापित नहीं करते हैं (टीसीपी के विपरीत जहां आपके पास प्रति कनेक्शन एक सॉकेट होगा)। इसलिए आपको डेटाग्राम प्राप्त होने पर रिमोट एंडपॉइंट का पता होना चाहिए।

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receivefrom.aspx

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