私は、ハンドラ関数に変数を渡すことができるようにTCPHandlerクラスのコンストラクタをオーバーライドしようとしています。私に。私はhandle()
メソッドのsendall関数にバイト配列を渡さなければなりません。そして、上記を行うためのさまざまなアプローチを見て、コンストラクタをオーバーライドするのが最も優先されたオプションでした。私はhelp(superTCPHandler))
を印刷するとき ザ・は、handle()
関数はその継承を示していない、5つの引数がsockerサーバーのコンストラクタオーバーライドで4つ与えられる
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()
私のコードでコードがコンパイルされますが、何もしない、またはクライアントが何も受信しません。私はhandle()
関数が私のカスタムクラスから呼び出されていないと仮定しています。私は間違いが__init__
の部分にあるという強い感情を持っています。私は、異なるアプローチで何度も試してみましたが、うまくいかなかったのです。これを行う正しい方法は何ですか?
基本クラス(MyTCPHandler)のオブジェクトを作成する必要があるかどうかわからないため、custom_serverオブジェクトを初期化する前にサーバーオブジェクトにコメントしました。私はちょっとソケットプログラミングに新しいです、私の盲目の間違いのために私を許してください。
これは私が取得エラーです:
custom_server = superTCPHandler((HOST, PORT), superTCPHandler, bytearray([114, 100, 100 ,100, 2]))
TypeError: __init__() takes exactly 5 arguments (4 given)
[Finished in 0.1s with exit code 1]