#coding=utf-8
from socket import *
import struct
filename = "nene.jpg"
server_ip = "192.168.145.1"
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:#如果操作码是5
        print("文件不存在...")
        break#跳出循环
    #print("操作码: %d,ACK: %d,服务器随机端口: %d"%(caozuoma, ack_num, rand_port, len(recv_data[0][4])))
    f.write(recv_data[0][4:])#将数据写入
    if len(recv_data[0]) < 516:
        break#如果该数据包接受的长度小于516 跳出循环
    ack_data = struct.pack("!HH", 4, ack_num)#发确认包
    s.sendto(ack_data, (server_ip, rand_port))#回复ACK确认包我导入socket模块了 
"C:\Program Files\Python37\python.exe" D:/Users/MM/PycharmProjects/gui/socket/完整版下载器.py
Traceback (most recent call last):
  File "D:/Users/MM/PycharmProjects/gui/socket/完整版下载器.py", line 7, in <module>
    s = socket(AF_INET, SOCK_DGRAM)
NameError: name 'socket' is not defined
Process finished with exit code 1