मेरे पास एक बहुत ही सरल असीमित यूडीपी श्रोता है, जो सेवा के रूप में सेटअप है, और यह थोड़ी देर के लिए काफी अच्छा काम कर रहा है, लेकिन हाल ही में यह सॉकेटएक्सप्शन An existing connection was forcibly closed by the remote host
पर दुर्घटनाग्रस्त हो गया है। मेरे पास तीन प्रश्न हैं:सी # असिनक यूडीपी श्रोता सॉकेटएक्सप्शन
- इसका क्या कारण है? (मुझे नहीं लगता था कि यूडीपी सॉकेट के पास कनेक्शन था)
- परीक्षण उद्देश्यों के लिए मैं इसे कैसे डुप्लिकेट कर सकता हूं?
- मैं अपवाद को कैसे साफ कर सकता हूं, इसलिए सब कुछ काम जारी रहेगा?
private Socket udpSock; private byte[] buffer; public void Starter(){ //Setup the socket and message buffer udpSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); udpSock.Bind(new IPEndPoint(IPAddress.Any, 12345)); buffer = new byte[1024]; //Start listening for a new message. EndPoint newClientEP = new IPEndPoint(IPAddress.Any, 0); udpSock.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref newClientEP, DoReceiveFrom, udpSock); } private void DoReceiveFrom(IAsyncResult iar){ try{ //Get the received message. Socket recvSock = (Socket)iar.AsyncState; EndPoint clientEP = new IPEndPoint(IPAddress.Any, 0); int msgLen = recvSock.EndReceiveFrom(iar, ref clientEP); byte[] localMsg = new byte[msgLen]; Array.Copy(buffer, localMsg, msgLen); //Start listening for a new message. EndPoint newClientEP = new IPEndPoint(IPAddress.Any, 0); udpSock.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref newClientEP, DoReceiveFrom, udpSock); //Handle the received message Console.WriteLine("Recieved {0} bytes from {1}:{2}", msgLen, ((IPEndPoint)clientEP).Address, ((IPEndPoint)clientEP).Port); //Do other, more interesting, things with the received message. } catch (ObjectDisposedException){ //expected termination exception on a closed socket. // ...I'm open to suggestions on a better way of doing this. } }
अपवाद recvSock.EndReceiveFrom() लाइन पर फेंक दिया जा रहा है:
मेरे कोड निम्नलिखित की तरह कुछ लग रहा है।
ग्रेट मैन के नीचे क्या चल रहा है! हाय को आईसीएमपी संदेशों को प्राप्त करने और प्राप्त होने पर अपवाद फेंकने की एक ही समस्या थी। जो आपके कोडिंग चाल से हल हो जाता है! – Kevan
@ केली, आखिर में मैं पूरी तरह से परीक्षण करने के लिए चारों ओर मिल गया! ऐसा लगता है कि यह अपवाद का वास्तविक मूल कारण था। संदर्भ के लिए, मैंने आपके उत्तर और जिम दोनों का उपयोग करके समाप्त कर दिया, ताकि अगर कोई अपवाद हो, तो श्रोता पुनरारंभ हो जाता है। – chezy525
टूटा लिंक। यह उत्तर लिंक को अपडेट करने या लिंक को इंगित करने वाली जानकारी को शामिल करने के लिए बदला जाना चाहिए। –