格式:
使用struct/socket制作下载器
import struct
from socket import *
def main():
downloadFile = input(“请输入你要下载的文件名:”)
#创建套接字socket
updSocket = socket(AF_INET, SOCK_DGRAM)
#创建请求下载信息
ruestionData = struct.pack(“!H%dsb5sb”%len(downloadFile, 1, downloadFile, 0, octet, 0))
#发送下载文件请求
updSocket.sendto(ruestionData,”192,168,1,1”, 89)
#创建本地文件
newFile = open(downloadFile,'bw')
while True:
#接收服务器发送回来的数据
responseData = socket.recvfrom(1024)
recvData, serverInfo = responseData
#解包
opNum = struct.unpack("!H", recvData[:2])
packNum = struct.unpack("!H", recvData[2:4])
if opNum[0] == 3:
num = num + 1
if num == 65535:
num =0
if num == packNum[0]:
newFile.write(recvData[4:])
num = packNum[0]
#整理ACK的数据包
ackData = struck.pack("!HH", 4, packNum[0])
updSocket.sendto(ackData, serverInfo)
elif opNum[0] == 5:
print("sorry,没有这个文件....")
flag = False
if len(recvData) < 516:
break
if flag == True:
f.close()
else:
os.unlink(downloadFileName) # 如果没有要下载的文件,那么就需要把刚刚创建的文件进行删除
if name == ‘main‘:
main()