importsocketimportthreadingimportosclassrecogServer:def __init__(self):print('启动服务')
self.sock= socket.socket() #创建socket
self.addr = ('127.0.0.1',9999) #服务器要绑定的IP和端口
self.sock.bind(self.addr) #绑定IP和端口 有一个端口已占用的问题
self.clients ={}defstart(self):
self.sock.listen()
accept_thread= threading.Thread(target=self.accept, name='accpet_thread')
accept_thread.start()defaccept(self):whileTrue:
s, raddr=self.sock.accept()
self.clients[raddr]=s
recv_thread= threading.Thread(target=self.recv, name='recv_thread', args=(s, raddr))
recv_thread.start()defrecv(self, s, raddr):
clientStr= raddr[0] + '-' + str(raddr[1])
clientDir= 'recvImage/' +clientStr
self.makeDir(clientDir)#为每一个客户端建立一个文件夹,用来保存图片
whileTrue:try:
data= s.recv(1024).decode()if data == 'end': #图片发送完毕,退出接收图片的循环
break
if len(data): #判断是否接收到了数据
fileName,length = data.split('|')#if fileName and length:
total_length =int(length)
newFile= open(clientDir + '/' + fileName,'wb')
s.send(b'ok')
get=0
file= b''
while get
fileData= s.recv(1024)
file= file +fileData
get= get +len(fileData)if len(file) ==total_length:
newFile.write(file[:])
s.send(b'continue')
newFile.close()exceptConnectionResetError:print('error')
s.close()
s.send(b'successfully received') #将图片全部接收完毕后,给客户端一个响应
'''def recogPerson(self, path):
1. 加载模型
2.读取path下的图片
3.进行识别,将识别结果保存在一个字符数组中
4.如果数组中有两个相同的元素,就将该元素返回给客户端'''
defmakeDir(self, path):
path=path.strip()if notos.path.exists(path):
os.mkdir(path)defstop(self):for item inself.clients.values():
item.close()
self.sock.close()if __name__ == '__main__':
myserver=recogServer()
myserver.start()whileTrue:
input_str= input('>>>')if input_str.strip() == 'quit':
myserver.stop()break
print(threading.enumerate())