import struct
from socket import *
filename="dog.jpd"
server_ip="192.168.1.41"
send_data=struct.pack("!H%dsb5sb"%len(filename),1,filename.encode(),0,"octet".encode(),0)
s=socket(AF_INET,SOCK_DGRAM)
s.sendto(send_data,(server_ip,69)) #发送读写请求
f=open(filename,"ab") #创建空文件
while True:
recv_data=s.recvfrom(1024)#接收数据
caozuoma,ack_num=struct.unpack("!HH",recv_data[0][:4])#获取数据块编号 哪一块数据
rand_port=recv_data[1][1] #获取随机端口
if int(caozuoma)==5: #说明丢包了
print("文件不存在")
break
print("操作码:%d,ACK:%d,服务器随机端口:%d,数据长度:%d"%(caozuoma,ack_num,rand_port,len(recv_data)))
f.write(recv_data[0][4:]) #将数据写入空文件
if len(recv_data[0])<516:
break
ack_data=struct.pack("!HH",4,ack_num) #请求的格式
s.sendto(ack_data,(server_ip,rand_port))#发送请求

老师这个数据长度是根据你的图片大小来定的吗 不同大小的数据 每次发送的数据块也是不一样的 对吧