以确定大小的块将字节从客户端流式传输到服务器的最佳方式是什么?
现在我正在用 base64 编码一个音频文件,然后用 zlib 压缩它并通过套接字连接发送。我的问题是尝试在服务器中重建原始文件。
我使用一个空字符串进行了思考和测试,该字符串与服务器正在接收的所有字节一起添加。看起来不错,但是开头的“b'”被保留了,导致它无法恢复原始音频文件。
我刚刚尝试解码字节并从服务器接收到的每组字符串的开头删除“b'”和从结尾(data[2:-1])删除“”,但这减少了一些原著中的人物。
客户端:
with open(arquivo, 'rb') as input_file:
abc = base64.b64encode(input_file.read())
try1 = zlib.compress(abc)
n = 338
result = [try1[i:i+n] for i in range(0, len(try1), n)]
HOST = ''
PORT = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((HOST,PORT))
i = 0
for item in result:
item = str(item)
print(item)
s.send(item.encode())
i += 1
print('i = ', i)
time.sleep(2)
服务器端:
HOST = ''
PORT = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
print('Servidor Inicializado')
s.bind((HOST,PORT))
s.listen()
audiofile = ''
i = 0
conn, addr = s.accept()
while True:
data1 = conn.recv(2048)
print('data1 undecoded = ', data1)
text = data1.decode()
data = text[2:-1]
print('data EDITADO = ', data)
audiofile = audiofile + data
i += 1
print('i = ', i)
print('audiofile = ', audiofile)
if not data:
print('No Data Received!')
print('Recebeu tratado :', data)
不知道如何进行,任何帮助表示赞赏。谢谢!