2013-05-08 6 views
12

मैं SocketServer के लिए प्रलेखन देख रहा हूं। मैंने प्रलेखन से टीसीपी सर्वर कोड की प्रतिलिपि बनाई और यह ठीक चलाता है।सॉकेटसेवर: '[Errno 98] पता से पहले से छुटकारा पा रहा है'

socket.error: [Errno 98] Address already in use 

मैं कैसे समस्या का समाधान करने में देखा: हालांकि, मैंने देखा है कि जब भी मैं अपने टर्मिनल में कार्यक्रम से बाहर Ctrl-c'ed, और फिर इसे फिर से चलाने की कोशिश की, मैं निम्न त्रुटि मिलेगा this और this पढ़कर। मैं अभी भी एक ही समस्या से ऊपर लाइन भी साथ जोड़ा सामना कर रहा

server.allow_reuse_address = True 

: मैं पता का पुन: उपयोग की अनुमति देने के लिए प्रयास करने के लिए मेरे कोड में निम्नलिखित पंक्ति गयी। मैंने और except को अपने server.serve_forever() फ़ंक्शन के आस-पास जोड़ा, कीबोर्ड इंटरप्ट अपवाद को पकड़कर server.shutdown() और server.socket.close() पर कॉल करने की आशा में यह पता चला कि पता मुक्त हो जाएगा।

यहाँ मेरी TCP सर्वर कोड की पूर्ण सीमा तक है

if __name__ == "__main__": 
    HOST, PORT = '', 9999 

    # Create the server, binding to localhost on port 9999 
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
    server.allow_reuse_address = True 

    # Activate the server; this will keep running until you 
    # interrupt the program with Ctrl-C 
    try: 
     server.serve_forever() 
    except KeyboardInterrupt: 
     server.shutdown() 
     server.socket.close() 

मैं अभी भी ऊपर कोड चलाने त्रुटि हो रही है और जब तक एक मिनट के करीब इंतजार करना: (नोट: मैं MyTCPHandler वर्ग को छोड़कर) पता अंततः मुक्त हो गया है। जब मैं डीबगिंग कर रहा हूं और लगातार अपना कोड बदल रहा हूं तो यह निराशाजनक है।

मैं रास्पबेरी "व्हीजी" 7.0 पर रास्पबेरीपी पर पाइथन 2.7.3 का उपयोग कर यह कोड चला रहा हूं।

उत्तर

18
... 
SocketServer.TCPServer.allow_reuse_address = True 
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
... 

allow_reuse_address वर्ग पर होना चाहिए, उदाहरण के पर नहीं।

+0

यह काम किया। धन्यवाद! –

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