2011-08-26 25 views
14

मैं अतुल्यकालिक सॉकेट सर्वर से यूडीपी आंकड़ारेख प्राप्त करने की आवश्यकता द्वारा बंद कर दिया गया था, लेकिन अपने आवेदन में एक अपवाद उत्पन्न हुई:कोई मौजूदा कनेक्शन बलपूर्वक दूरस्थ होस्ट

समस्या वहाँ दिखाई देते हैं:

Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); 

पूर्ण स्रोत कोड :

class Program 
    { 
     static void Main(string[] args) 
     { 
      const int PORT = 30485; 
      IPAddress IP; 
      IPAddress.TryParse("92.56.23.87", out IP); 
      // This constructor arbitrarily assigns the local port number. 
      UdpClient udpClient = new UdpClient(PORT); 
      Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
      try 
      { 
       udpClient.Connect("92.56.23.87", PORT); 

       if (udpClient.Client.Connected) 
        Console.WriteLine("Connected."); 

       // Sends a message to the host to which you have connected. 
       Byte[] sendBytes = Encoding.ASCII.GetBytes("CONNECT"); 

       udpClient.Send(sendBytes, sendBytes.Length); 

       //IPEndPoint object will allow us to read datagrams sent from any source. 
       IPEndPoint RemoteIpEndPoint = new IPEndPoint(IP, PORT); 

       // Blocks until a message returns on this socket from a remote host. 
       Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); 
       string returnData = Encoding.ASCII.GetString(receiveBytes); 
       // Uses the IPEndPoint object to determine which of these two hosts responded. 
       Console.WriteLine("This is the message you received " + returnData.ToString()); 
       Console.WriteLine("This message was sent from " + RemoteIpEndPoint.Address.ToString() + " on their port number " + RemoteIpEndPoint.Port.ToString()); 

       udpClient.Close(); 

      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 

      } 
     } 
    } 

अपवाद:

Connected. 
System.Net.Sockets.SocketException (0x80004005): An existing connection 
was forcibly closed by the remote host at System.Net.Sockets.Socket.ReceiveFrom(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint& remoteEP) at ystem.Net.Sockets.UdpClient.Receive(IPEndPoint& remoteEP) at ConsoleApplication7.Program.Main(String[] args) in c:\users\user\documents\visual studio 2010\Projects\ConsoleApplication7\ConsoleApplication7\Program.cs 

समस्या क्या हो सकती है?


में अधिक जानकारी प्रदान करने के लिए, मैं इस पृष्ठ पर निजी मोजे कनेक्शन खरीदा: http://rapidsocks.com/ इस सेवा मुझे और आईपी की एक सूची बंदरगाह जो वास्तव में एक प्रॉक्सी नहीं है दे .. सिर्फ एक कनेक्शन है कि मुझे एक दे proxyIP: प्रतिक्रिया में सर्वर पर एक पूल से प्रॉक्सीपोर्ट ...

प्रॉक्सीआईपी के साथ यह जवाब कैसे प्राप्त करें: सर्वर से प्रॉक्सीपोर्ट?

+0

अच्छा सवाल - थोड़ा अधिक हो सकता है अगर आप हमें बता - जहां अपवाद फेंक दिया जाता है: आप निम्न कोड के साथ जो व्यवहार से बचने के लिए सक्षम होना चाहिए? क्या आप कंसोल पर अपने "डीबग संदेश" में से कोई भी देखते हैं? क्या आप हमें एक टेस्ट रन दिखा सकते हैं? – Carsten

+0

कृपया पकड़ ब्लॉक में एक स्टैकट्रेस प्रिंट करें और देखें कि अपवाद किस रेखा को फेंक रहा है। – Zenwalker

+0

* दूसरी तरफ * सही तरीके से काम कर रहा है - क्या यह? क्या आप इसे देख सकते हैं? – Carsten

उत्तर

3

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

+0

प्रॉक्सी सेवाओं वाला एक सर्वर है, यह निजी है और आईपी प्राप्त करने के बारे में कोई जानकारी है: आंतरिक पर पोर्ट आरएफसी 1 9 28 – Johnny

+0

कनेक्ट में लिखना है किसी कनेक्शन के उत्तर में, BND.PORT में पोर्ट नंबर होता है जो सर्वर को लक्षित होस्ट से कनेक्ट करने के लिए असाइन किया गया सर्वर है, जबकि BND.ADDR में संबंधित आईपी पता है।आपूर्ति की गई BND.ADDR अक्सर आईपी पते से भिन्न होती है जो क्लाइंट सॉक्स सर्वर तक पहुंचने के लिए उपयोग करता है, क्योंकि ऐसे सर्वर अक्सर बहु-गृह होते हैं। यह की अपेक्षा है कि SOCKS सर्वर CONSTECT अनुरोध का मूल्यांकन करने में DST.ADDR और DST.PORT, और क्लाइंट-साइड स्रोत पता और पोर्ट का उपयोग करेगा। – Johnny

+0

क्या सर्वर या प्रॉक्सी में कोई अपवाद है? – CodingBarfield

41

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

http://support.microsoft.com/kb/263823/en-us

यह अपवाद आपको बताता है कि कोई प्रक्रिया उस पोर्ट पर ध्यान जाता है।


अद्यतन:

var udpClient = new UdpClient(); 
    uint IOC_IN = 0x80000000; 
    uint IOC_VENDOR = 0x18000000; 
    uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12; 
    udpClient.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null); 
+0

मेरे लिए यह समस्या हल हो गई है() भेजने के बाद अपवाद का कारण बन गया है() ने श्रोता के बिना सॉकेट में डेटाग्राम भेजा है। मैं त्रुटियों के बिना श्रोता के बिना कई डेटाग्राम भेज सकता हूं, लेकिन प्राप्त करें() तब काम नहीं करेगा। बहुत अस्पष्ट त्रुटि व्यवहार। यह समाधान समान अस्पष्ट है, लेकिन इससे बहुत मदद मिली! +1 – Roland

+0

यह त्रुटि तब थी जब फ़ील्ड में डिवाइस अचानक आईपी पते बदल देंगे जबकि यूडीपी पैकेट बकाया थे। यह तय है। – SteveGSD

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