

from socket import *
import struct
filename="cat.jpg"
server_ip="192.168.31.139."
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))  #回复ACK确认包老师,这个模拟的服务器是打开就可以么?执行代码,显示文件不存在帮忙看下什么原因呢?