老师请问为什么我这个运行后打印的数据长度只有2的?
from socket import *
import struct
filename='cui.jpg' # 创建一个存放要下载的文件的变量
server_ip='192.168.1.60' # 创建一个存放IP地址的变量
# 创建读写请求
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,数据长度:%d'%(caozuoma,ack_num,rand_port,len(recv_data)))
f.write(recv_data[0][4:]) # 将512个字节的数据写入
if len(recv_data[0])<516: # 如果收到的数据少于516个字节,说明发送完毕了
break
ack_data=struct.pack('!HH',4,ack_num) # 发送确认包 4+块编号
s.sendto(ack_data,(server_ip,rand_port))
