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不,這只是客戶端和服務器都可以在一個Python進程中運行。如果您爲服務器和客戶端使用單獨的Python腳本,則不需要它。 –