from socket import *
import struct
udpSocket = socket(AF_INET,SOCK_DGRAM)
tftpAddr = ("192.168.235.1",69)
#发送请求
filename = input("请输入文件名:")
fmt = str.format("!H%dsb5sb"%len(filename))
msg = struct.pack(fmt,1,filename.encode(),0,b"octet",0)
udpSocket.sendto(msg,tftpAddr)
f = None
while True:
#解包
recvData = udpSocket.recvfrom(1024)
data = struct.unpack("!HH",recvData[0][:4])
#print(data)
datatype = data[0]
dataNo = data[1]
if datatype == 5:#出错信息
print(recvData[0][4:].decode())
break
elif datatype == 3:#正常数据
dataLen = len(recvData[0][4:])
if dataNo == 1:
f = open(filename,"wb")
f.write(recvData[0][4:])
else:
f.write(recvData[0][4:])
#给服务器发确认包
msg = struct.pack("!HH",4,dataNo)
udpSocket.sendto(msg,recvData[1])
#接收数据报长度小于512就认为发送完毕
if dataLen < 512:
f.close()
break
else:
break
udpSocket.close()
Python tftp文件下载
猜你喜欢
转载自blog.csdn.net/Mr_Quiet/article/details/81236906
今日推荐
周排行