Итак, я должен отправить определенное сообщение на сервер (который уже существует).
Этот запрос соответствует следующему формату:
DO dirname number_of_files [file_size file_name file_data]*
, например, это может быть что-то вроде этого:
DO dir 2 1421 house.png [binary data I assume?] 1239 info.txt [more binary data?]
Как видите, файлов может быть сколько угодно.
Итак, я создал строку, в которую я добавляю всю информацию и в конце посылаювсе вместе, но я застрял в части данных.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(ip, port)
request = "DO " + directory + " " + str(number_of_files)
for file_number in range(0,number_of_files):
data = open("./" + directory + "/" + files_info[file_number*2], 'rb').read()
client_request += " " + " ".join(files_info[file_number*2 : 1 + file_number*2]) + " " + data
s.send((request + "\n").encode())
Это не работает, потому что я пытаюсь добавить данные, которые являются двоичными, в строку (TypeError: must be str, not bytes
).Я пытался использовать .decode () перед добавлением, но получаю ошибку декодера utf-8 (UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
).Я попробовал с utf-16 и ascii, и это тоже не сработало.
Должен ли я обращаться с этим по-другому?Я сделал больше таких запросов, но ни один из них не включал данные из файлов, только цифры / строки, поэтому раньше проблем не было.
Я пытаюсь следовать этому формату, потому что сейчас весь код выполненвот так (и эти шаги, которые я показал, не все выполняются в одних и тех же функциях), поэтому изменение способа отправки сообщений не является оптимальным