मुझे .net सॉकेट का उपयोग कर क्लाइंट से डेटा प्राप्त करने में समस्या हो रही है। ग्राहक तत्काल कनेक्शन बंद करने से पहले टीसीपी के साथ संचार कर रहा है और एक या दो पैकेट भेज रहा है। रिसेप्शन इस प्रकार है:डेटा को रीसेट करने से पहले सॉकेट कनेक्शन रीसेट
Socket newConnection = listener.EndAccept(ar);
newConnection.BeginReceive(myBuffer,0, length, SocketFlags.None, Callback,null);
और निष्पादन आगे नहीं बढ़ेगा। StartReceive तुरंत सॉकेट अपवाद को फेंक देगा कि कनेक्शन रीसेट हो गया था। मैं प्राप्त डेटा प्राप्त करने के लिए प्रबंधन नहीं कर सकता।
SYN // SYN, AKC // AKC
PSH, ACK for 156 bytes
PSH, ACK for 176 bytes
RST, ACK
और बस हो गया:
यहाँ है कि मैं क्या wireshark पर इस कनेक्शन के लिए देखते हैं। क्या ग्राहक द्वारा कनेक्शन बंद होने के बावजूद यह प्राप्त डेटा प्राप्त करने का कोई माध्यम है?
वहाँ किसी भी तरह से आप अपने ग्राहक बंद करने से पहले अपने प्राप्त कार्यक्रम से एक "स्वीकार" पैकेट के लिए प्रतीक्षा कर सकते हैं है: होगा मैं तुल्यकालिक कॉल उपयोग करने का सुझाव -
टीसीपी ही एकमात्र विकल्प मानते हुए है? –
मैं वास्तव में नहीं कर सकता। क्लाइंट का उपयोग अन्य सर्वरों पर किया जाता है और यह काम करता है, इसलिए मुझे ऐसा करने में सक्षम होना चाहिए। मुझे यह देखने के लिए इन अन्य सर्वरों के स्रोत कोड तक पहुंच नहीं है कि यह कैसे करें। –
यदि आप आरएसटी आने से पहले डेटा नहीं पढ़ते हैं तो आप इतना कुछ नहीं कर सकते हैं (यह इंगित करता है कि प्रेषक एक अपमानजनक बंद कर रहा है)। प्रेषक एक एफआईएन (यानी सुंदर बंद, [सॉकेट। शटडाउन] (http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.shutdown.aspx) के बजाय आरएसटी क्यों भेज रहा है)? –