客户端服务器发送图片不显示,socket编程-多个客户端向服务器发送图片(服务器使用多线程)...

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())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值