2012-12-08 24 views
5

में s.recv() का उपयोग करते समय अजीब त्रुटि मैं एक प्रोग्राम बना रहा हूं जिसे सर्वर से कनेक्शन हैश प्राप्त करने की आवश्यकता है। जब मैं का उपयोग करें:पायथन

connhash = s.recv(1024) 

मैं इस त्रुटि मिलती है:

[Errno 10054] An existing connection was forcibly closed by the remote host 

इस मेरी गलती या सर्वर गलती है?

यहाँ कोड के कुछ()

stringfmt = u'%(user)s;%(host)s:%(port)d' 
string = stringfmt % data 
structfmt = '!bh' 
encoded = string.encode('utf-16BE') 
packetbytes = struct.pack(structfmt, 2, len(encoded))+encoded 
s.send(packetbytes) 
connhash = s.recv(1024) 

मैं वी 2.7

संपादित करें अजगर का उपयोग कर रहा s.recv करने के लिए अग्रणी है: यह सिर्फ इसलिए आप जानते हैं Minecraft के लिए है।

+0

वह सर्वर कनेक्शन बंद कर देता है - शायद क्योंकि आप कुछ भेज रहे हैं, यह समझ में नहीं आता है, शायद क्योंकि यह सही ढंग से काम नहीं कर रहा है ... यह कहना असंभव है कि कौन सी गलती है, यह अधिक जानकारी के बिना है। – mata

+0

जबरन मेरे लिए एक आरएसटी (एफआईएन के विपरीत) की तरह लगता है ... लेकिन यदि आप वास्तव में जानना चाहते हैं, तो आपको शायद एक पैकेट कैप्चर (टीसीपीडम्प, वायरशर्क, आदि) करना चाहिए। – FatalError

उत्तर

2

ऐसा लगता है कि रिमोट सर्वर आपके कनेक्शन को पसंद नहीं करता है और आपको काट देता है। इसका मतलब यह हो सकता है कि आपने प्रोटोकॉल गलती की है (यानी, जो आदेश आप भेज रहे हैं वे गलत हैं), या आपने सफलतापूर्वक लॉग इन नहीं किया हो सकता है, या आपके आईपी पर प्रतिबंध लगा दिया गया हो सकता है, या कई अन्य समान चीजें हैं।

इसे डीबग करने के लिए, आप कनेक्शन को दोहराने के लिए टेलनेट की तरह कुछ उपयोग करने का प्रयास कर सकते हैं और देख सकते हैं कि त्रुटि कहां होती है (यदि ऐसा नहीं होता है, तो आपके कार्यान्वयन में कुछ गड़बड़ है; यदि ऐसा होता है, तो इसमें कुछ गड़बड़ है प्रोटोकॉल की आपकी समझ, या आप सर्वर का उपयोग करने से अवरुद्ध हैं)।

वैकल्पिक रूप से, पैकेट कैप्चर टूल का उपयोग करें जैसे Wireshark यह देखने के लिए कि कौन से पैकेट भेजे और प्राप्त किए जा रहे हैं, और देखें कि इससे समस्या दिखाई देती है या नहीं।