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 秒で終了]