python 使用socket传输图片视频等文件的实现方式
在开发一些需要网络通信的应用中,经常会用到各种网络协议进行通信,博主在开发实验室的机器人的时候就遇到了需要把机器人上采集到的图片传回服务器进行处理识别,在python下的实现方式如下(只贴出了关键代码)
服务器端
LOCAL_IP='192.168.100.22'#本机在局域网中的地址,或者写127.0.0.1
PORT=2567#指定一个端口
defserver():
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#socket.AF_INET指ipv4socket.SOCK_STREAM使用tcp协议
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#设置端口
sock.bind((LOCAL_IP,PORT))#绑定端口
sock.listen(3)#监听端口
whileTrue:
sc,sc_name=sock.accept()#当有请求到指定端口是accpte()会返回一个新的socket和对方主机的(ip,port)
print('收到{}请求'.format(sc_name))
infor=sc.recv(1024)#首先接收一段数据,这段数据包含文件的长度和文件的名字,使用|分隔,具体规则可以在客户端自己指定
length,file_name=infor.decode().split('|')
iflengthandfile_name:
newfile=open('image/'+str(random.randint(1,10000))+'.jpg','wb')#这里可以使用从客户端解析出来的文件名
print('length{},filename{}'.format(length,file_name))
sc.send(b'ok')#表示收到文件长度和文件名
file=b''
total=int(length)
get=0
whileget
客户端
address=('192.168.100.22',2567)
defsend(photos):
forphotoinphotos[0]:
print('sending{}'.format(photo))
data=file_deal(photo)
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(address)
sock.send('{}|{}'.format(len(data),file).encode())#默认编码utf-8,发送文件长度和文件名
reply=sock.recv(1024)
if'ok'==reply.decode():#确认一下服务器get到文件长度和文件名数据
go=0
total=len(data)
whilego
总结
以上所述是小编给大家介绍的python使用socket传输图片视频等文件的实现方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!