Ошибка Python SocketServer при подключении - PullRequest
2 голосов
/ 03 апреля 2011

Я использую сервер Python, используя модуль socketserver в Python 3.1. Каждый раз, когда я получаю соединение от клиента (что происходит на стороне клиента), мой сервер получает ошибку. Вот мой код:

import socket
import socketserver
import string
import struct

class Server(socketserver.BaseRequestHandler):
    def __init__(self):
        self.address = self.client_address[0]
        print("%s connected." % str(self.address[1]))
    def handle(self):
        message = self.request.recv(1024).decode().strip()
        print("%s sent: '%s'" % (self.address,message))

if __name__ == "__main__":
    server = socketserver.TCPServer(("localhost",22085), Server)
    print("Socket created. . .")
    print("Awaiting connections. . .")
    server.serve_forever()

А вот и моя ошибка:

----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 49669)
----------------------------------------
Traceback (most recent call last):
  File "C:\Python31\lib\socketserver.py", line 281, in _handle_request_noblock
    self.process_request(request, client_address)
  File "C:\Python31\lib\socketserver.py", line 307, in process_request
    self.finish_request(request, client_address)
  File "C:\Python31\lib\socketserver.py", line 320, in finish_request
    self.RequestHandlerClass(request, client_address, self)
TypeError: __init__() takes exactly 1 positional argument (4 given)

Странная вещь, которую я заметил в этой ошибке, заключается в том, что порт, который он выдает во второй строке, отличается от порта, который я использую. Я не совсем уверен, в чем здесь ошибка ...

Спасибо за помощь.

1 Ответ

3 голосов
/ 03 апреля 2011

Попробуйте вызвать метод __init__ суперкласса:

class Server(socketserver.BaseRequestHandler):
    def __init__(self):
        self.address = self.client_address[0]
        print("%s connected." % str(self.address[1]))
        super(Server,self).__init__()                  # Init your base class
...