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脚本,则不需要它。 –