3

socketserverPython 3.1のモジュールを使用して Python サーバーを実行しています。クライアントから接続を取得するたびに (クライアント側で成功します)、サーバーでエラーが発生します。これが私のコードです:

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)

エラーについて気付いた奇妙な点は、2 行目に表示されるポートが、使用しているポートと異なることです。ここで何がエラーなのかよくわかりません...

助けてくれてありがとう。

4

2 に答える 2

4

__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
于 2011-04-02T21:19:33.457 に答える
1

ほぼ10年後、私は同じ問題を抱えていました。(パイソン3.9)

ガイダンスとして上記の投票された回答のおかげで、カスタマイズされた RequestHandler が 3 つの引数を取ることが期待されていることがわかりました。その__init__ため、エラーを解決するには、次のように 3 つのパラメーターをオーバーライドする必要がありました。

class ServerRequestHandler(socketserver.BaseRequestHandler):
    def __init__(self, request, client_addr, server):
                # Custom initialisation code here....
                super().__init__(request, client_addr, server)
于 2021-03-26T01:42:21.030 に答える