from socket import *
import struct
filename = input("请输入需要下载的文件名:")
server_ip = "192.168.1.102"
send_data = struct.pack("!H%dsb5sb" % len(filename), 1, filename.encode(), 0, "octet".encode(), 0) #pack封装成字节流
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]) #unpack解析字节流
rand_port = recv_data[1][1] #获取服务器的随机端口
if int(caozuoma) == 5: #ERROR操作码是5
print("文件不存在!")
break
print("操作码:{0},ack:{1},服务器随机端口:{2},数据长度:{3}".format(caozuoma, ack_num, rand_port, len(recv_data[0])))
f.write(recv_data[0][4:]) #写入数据
if len(recv_data[0]) < 516:
print("下载完毕")
break
ack_data = struct.pack("!HH", 4, ack_num)
s.sendto(ack_data, (server_ip, rand_port)) #回复ACK确认包
你好,老师,请问一下为什么我的图片名为中文的时候就下载不成功,而文件名为英文的时候就能成功下载。
