2009-04-14 5 views
8

सी # में मैं UdpClient.Receive समारोह का उपयोग कर रहा प्रसारण पते पर प्राप्त करते हैं:UdpClient

public void StartUdpListener(Object state) 
    { 
     try 
     { 
      udpServer = new UdpClient(new IPEndPoint(IPAddress.Broadcast, 1234)); 
     } 
     catch (SocketException ex) 
     { 
      MessageBox.Show(ex.ErrorCode.ToString()); 
     } 

     IPEndPoint remoteEndPoint = null; 
     receivedNotification=udpServer.Receive(ref remoteEndPoint); 
     ... 

हालांकि मैं एक सॉकेट अपवाद कह रही है कि पता त्रुटि कोड के साथ उपलब्ध नहीं है हो रही है 10049 क्या मैं करने के लिए करते हैं इस अपवाद को अस्वीकार करें?

उत्तर

16

यहाँ कुछ कोड मैं वर्तमान में काम करता है कि एक उत्पादन अनुप्रयोग में उपयोग कर रहा हूँ के jist है (हम इस मामले में जहां क्लाइंट सर्वर क्षुधा एक स्टैंडअलोन स्थापना पर चल रहे हैं कर रहे हैं संभाल करने के लिए वहाँ में थोड़ा अतिरिक्त मिल गया है)। यह नौकरी अधिसूचनाएं प्राप्त करना है कि संदेश प्रसंस्करण के लिए तैयार हैं। जैसा कि एडम अलेक्जेंडर द्वारा वर्णित है, आपकी एकमात्र समस्या यह है कि आपको IPAddress का उपयोग करने की आवश्यकता है। किसी भी, IPAddress के बजाय। प्रसारण। आप केवल IPAddress का उपयोग करेंगे। ब्रॉडकास्ट जब आप एक प्रसारण यूडीपी पैकेट भेजेंगे।

udp ग्राहक

this.broadcastAddress = new IPEndPoint(IPAddress.Any, 1234); 
this.udpClient = new UdpClient(); 
this.udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
this.udpClient.ExclusiveAddressUse = false; // only if you want to send/receive on same machine. 

और एक async के शुरू होने से एक कॉलबैक का उपयोग कर प्राप्त गति प्रदान करने के लिए सेट करें।

this.udpClient.Client.Bind(this.broadcastAddress); 
this.udpClient.BeginReceive(new AsyncCallback(this.ReceiveCallback), null); 

उम्मीद है कि इससे मदद मिलती है, आपको इसे बिना किसी समस्या के सिंक्रनाइज़ करने के लिए अनुकूलित करने में सक्षम होना चाहिए। आप जो कर रहे हैं उसके समान ही। यदि आपको अभी भी इसके बाद त्रुटि मिल रही है तो कुछ और बंदरगाह का उपयोग करना चाहिए जिसे आप सुनना चाहते हैं।

तो, स्पष्ट करने के लिए।

IPAddress.Any = प्राप्त करने के लिए प्रयोग किया जाता है। मैं किसी भी आईपी पते पर आने वाले पैकेट को सुनना चाहता हूं। IPAddress.Broadcast = भेजने के लिए प्रयुक्त। मैं सुन रहा हूं कि किसी को भी एक पैकेट भेजना चाहता हूँ।

+0

हैलो, मेरे मामले में मुझे एक ही मशीन पर प्रसारण करते समय एक त्रुटि मिलती है। क्या आपको यह त्रुटि है, हो कैनी इस मुद्दे को हल करें – Smith

4
अपने उद्देश्यों के लिए

मेरा मानना ​​है कि आप IPAddress.Any बजाय IPAddress.Broadcast उपयोग करना चाहते हैं जाएगा। उम्मीद है की यह मदद करेगा!

0

कि त्रुटि चयनित आईपी/पोर्ट संयोजन करने के लिए प्रोटोकॉल नहीं कर सकते बाँध का मतलब है।

मैं उम्र में प्रयुक्त यूडीपी प्रसारण havent, लेकिन मुझे याद है कि आप अलग अलग IP सीमाओं का उपयोग करने की जरूरत है।

0

तरह से आप अपने UdpClient कॉन्फ़िगर किया है के साथ गलत कुछ भी नहीं है। क्या आपने एक अलग पोर्ट नंबर की कोशिश की है? शायद 1234 पहले से ही आपके सिस्टम पर एक अलग ऐप द्वारा उपयोग में है।

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