0
私はクライアントサーバーソケットのpythonスクリプトを持っています。クライアントの最初の接続であるかどうかを識別できるように、各接続の状態を保持したい。Pythonステートフルソケットプログラミング
`
import socket,sys,SocketServer
from threading import Thread
class EchoRequestHandler(SocketServer.BaseRequestHandler):
def setup(self):
self.clients = {}
print self.client_address, 'connected!'
self.request.send('hi ' + str(self.client_address) + '\n')
def setup(self):
print self.client_address, 'connected!'
self.request.send('hi ' + str(self.client_address) + '\n')
def getFile(self):
fle = self.request.makefile('r')
filename = fle.readline()
print("Got filename {}\n".format(filename))
data = 'fnord' # just something to be there for the first comparison
with open(filename[:-1], 'w') as outfile:
while data:
#data = self.request.recv(1024)
data = fle.read()
#print('writing {!r} to file ....'.format(data))
outfile.write(data)
print("Finish {}\n".format(filename))
print("finish handle")
def handle(self):
addr = self.client_address[0]
print(self.clients)
if addr not in self.clients:
print("firsttime")
self.clients[addr]=1
print(self.clients)
self.getFile()
def finish(self):
print self.client_address, 'disconnected!'
#self.request.send('bye ' + str(self.client_address) + '\n')
class ThreadedTCPServer(SocketServer.ThreadingMixIn,
SocketServer.TCPServer):
pass
if __name__=='__main__':
#server = SocketServer.ThreadingTCPServer(('localhost', 50000), EchoRequestHandler)
server = ThreadedTCPServer(('localhost', 60000), EchoRequestHandler)
server.serve_forever()
たびに、クライアントは、私は空のクライアントが辞書取得しています接続:私は失敗し、次のコードを書きました。接続設定が呼び出され、辞書が空になるたびに、clients
のように見えます。どのように私は各接続でその状態を維持することができますか?
おかげで、それは私が必要とするものです。一つの質問。サーバを起動するときには、 'server_thread = threading.Thread(target = server.serve_forever)'でスレッド内で起動する必要があります。 'server = ThreadedTCPServer(( 'localhost'、60000)、EchoRequestHandler)server.serve_forever()'これは私が起動する方法では十分ではありません。 – curious
@curiousいいえ、それはクライアントとサーバーがすべて1つのPythonプロセスで実行できるようになったことだけです。サーバーとクライアント用に別々のPythonスクリプトがある場合、それは必要ありません。 –