如何使用python socket模块实现简单的文件下载
server端:
#ftpserver端
importsocket,os,time
server=socket.socket()
server.bind(("localhost",8080))
server.listen()
whileTrue:
conn,addr=server.accept()
print("连接到客户端:",addr)
whileTrue:
try:#windows会直接报错,需要捕获异常
data=conn.recv(1024)
ifnotdata:
print("客户端已断开")
break
exceptExceptionase:
print("客户端已经断开")
break
cmd,filename=data.decode().split()#ex:getname.txt
ifos.path.isfile(filename):
f=open(filename,"rb")
#获取文件的字节大小
size=os.stat(filename).st_size
conn.send(str(size).encode())#发送文件大小
conn.recv(1024)
forlineinf:#客户端确认后发送文件内容
conn.send(line)
f.close()
print("文件下载完成")
conn.send("notfile".encode())
server.close()
client端:
importsocket
client=socket.socket()
client.connect(("localhost",8080))
whileTrue:
cmd=input(">>:").strip()
iflen(cmd)==0:continue
ifcmd.startswith("get"):
client.send(cmd.encode())#发送请求
server_response=client.recv(1024)
ifserver_response.decode().startswith("not"):
print("请输入有效文件名")
continue
client.send(b"readytorecvfile")#发送确认
file_size=int(server_response.decode())#获取文件大小
rece_size=0
filename=cmd.split()[1]
f=open(filename+".new","wb")
whilerece_size1024:#要收不止一次
size=1024
else:#最后一次了,剩多少收多少,防止之后发送数据粘包
size=file_size-rece_size
print("lastreceive:",size)
recv_data=client.recv(size)
rece_size+=len(recv_data)#累加接受数据大小
f.write(recv_data)#写入文件,即下载
else:
print("文件下载完成")
f.close()
client.close()
测试案例:
以上就是如何使用pythonsocket模块实现简单的文件下载的详细内容,更多关于pythonsocket文件下载的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。