import struct
from socket import *
udp_sock = socket(AF_INET, SOCK_DGRAM)
server_ip = "192.168.1.106"
filename = "taichi.jpg"
request_data = struct.pack("!H{}sb5sb".format(len(filename)),1,filename.encode(),0,b"octet",0)
udp_sock.sendto(request_data,(server_ip, 69))
f = open(filename,"ab")
while True:
recv_tuple = udp_sock.recvfrom(1024)
recv_port = recv_tuple[1][1]
recv_data = recv_tuple[0]
operation_code, block_number = struct.unpack("!HH", recv_data[:4])
# error_data = recv_data[4:]
print("操作码:{0},块编号:{1},端口:{2},字节长度;{3}".format(operation_code, block_number, recv_port, len(recv_data)))
if int(block_number) == 5:
print("文件无法下载...")
break
f.write(recv_data[4:])
if len(recv_data) < 516:
print("传输完成...")
break
udp_sock.sendto(struct.pack("!HH",4,block_number),(server_ip, recv_port))



老师,这是什么原因?