2013-02-27 31 views
5

मुझे .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 पर इस कनेक्शन के लिए देखते हैं। क्या ग्राहक द्वारा कनेक्शन बंद होने के बावजूद यह प्राप्त डेटा प्राप्त करने का कोई माध्यम है?

+0

वहाँ किसी भी तरह से आप अपने ग्राहक बंद करने से पहले अपने प्राप्त कार्यक्रम से एक "स्वीकार" पैकेट के लिए प्रतीक्षा कर सकते हैं है: होगा मैं तुल्यकालिक कॉल उपयोग करने का सुझाव -
टीसीपी ही एकमात्र विकल्प मानते हुए है? –

+0

मैं वास्तव में नहीं कर सकता। क्लाइंट का उपयोग अन्य सर्वरों पर किया जाता है और यह काम करता है, इसलिए मुझे ऐसा करने में सक्षम होना चाहिए। मुझे यह देखने के लिए इन अन्य सर्वरों के स्रोत कोड तक पहुंच नहीं है कि यह कैसे करें। –

+0

यदि आप आरएसटी आने से पहले डेटा नहीं पढ़ते हैं तो आप इतना कुछ नहीं कर सकते हैं (यह इंगित करता है कि प्रेषक एक अपमानजनक बंद कर रहा है)। प्रेषक एक एफआईएन (यानी सुंदर बंद, [सॉकेट। शटडाउन] (http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.shutdown.aspx) के बजाय आरएसटी क्यों भेज रहा है)? –

उत्तर

-1

इस प्रकार के संचार के साथ सबसे पहले यह टीसीपी के बजाय यूडीपी पर स्विच करना एक अच्छा विचार हो सकता है - इस तरह आप प्रेषक की स्थिति के बावजूद पैकेट प्राप्त करने में सक्षम होंगे।

Socket newConnection = listener.AcceptSocket(); 
newConnection.Receive(myBuffer, 0, length, SocketFlags.None); 
+1

यदि उसे क्लाइंट को यूडीपी का उपयोग करने के लिए बदलना है, तो वह इसे आरएसटी भेजने के लिए भी बदल सकता है। –

+0

और सिंक्रोनस कॉल का उपयोग करके कुछ भी नहीं बदला जाता है। जब भी AcceptSocket कॉल समाप्त हो जाती है तब तक सॉकेट रीसेट हो जाएगा और प्राप्त अभी भी फेंक देगा –

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