0

TCPHandler クラスのコンストラクターをオーバーライドして、変数をハンドラー関数に渡すことができるようにしようとしています。スタック上の他の投稿に出くわしましたが、明確ではありませんでした。メソッドの sendall 関数にバイト配列を渡すhandle()必要があり、上記を行うためのさまざまなアプローチを調べたところ、コンストラクターをオーバーライドすることが最も好ましいオプションでした。

これは私のコードです:

import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
    """
    :file:   TCP Handler
    :author: Prat, Warsaw, PL
    """
    def handle(self):

            self.data = self.request.recv(1024).strip()
            print "{} Sent: {}".format(self.client_address[0], self.data[0:3])

            self.request.sendall(bytearray(self.payload_))
            server.server_close()

class superTCPHandler(SocketServer.TCPServer):
        def __init__(self,request, client_address, server, payload_):
            self.payload_ = (payload_)
            SocketServer.TCPServer.__init__(self,request, client_address, BaseRequestHandler, payload_)


        def handle(self):
            self.data = self.request.recv(1024).strip()
            print "{} Sent: {}".format(self.client_address[0], self.data[0:3])


            self.request.sendall(self.payload_)
            print self.payload_ 
            server.server_close()

if __name__ == "__main__": 
            print (help(superTCPHandler ))

            HOST, PORT = "192.168.4.4", 12345
            #server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
            custom_server = SocketServer.TCPServer((HOST, PORT), superTCPHandler, bytearray([114, 100, 100 ,100, 2]))
            print "Listening on {}:{}".format(HOST, PORT)
            custom_server.handle_request()

を出力するhelp(superTCPHandler))と、handle()関数がその継承を表示しないか、コードがコンパイルされても何も実行されないか、またはクライアントが何も受信しません。handle()関数がカスタム クラスから呼び出されていないと想定しています。どこかの__init__部分が間違っている気がして、いろいろなアプローチで何度もトライしましたがうまくいきませんでした。そうする正しい方法は何ですか?

基本クラス (MyTCPHandler) のオブジェクトを作成する必要があるかどうかわからないため、custom_server オブジェクトを初期化する前にサーバー オブジェクトにコメントしました。私はソケットプログラミングにちょっと慣れていません。私の盲目的な間違いを許してください。

これは私が得るエラーです:

custom_server = superTCPHandler((ホスト, ポート), superTCPHandler, bytearray([114, 100, 100 ,100, 2]))

TypeError: init () は正確に 5 つの引数を取ります (4 つ指定)
[終了コード 1 で 0.1 秒で終了]

4

1 に答える 1