老师你好,请问转换后发生乱码怎么处理呢?
import struct
from socket import *
filename = 'zzbds.azw3'
server_ip = '100.98.57.142'
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('f:\\1\\a.txt', 'ab') # a代表以追加模式打开,b代表以二进制模式打开 'f:\1\a.png'
while True:
recv_data = s.recvfrom(2048) # 接受数据
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[0])))
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确认包