Отправка строки и байта [] из приложения Android на сервер Python через сокеты - PullRequest
0 голосов
/ 28 сентября 2019

Я отправляю изображение из приложения для Android в виде байтового массива.Ранее я мог посылать массив по частям, а затем помещать эти части в список в python, но это создавало некоторые ошибки, потому что python загружал бы каждую часть с b ', и они оставались бы как часть строки.Поэтому я сейчас пытаюсь отправить весь байтовый массив.Перед отправкой массива я отправляю строку, в которой указан размер байтового массива, чтобы я мог вызвать call .recv для правильного размера.

bytes_len = int(clean_len(str(connection.recv(1024))))

Где clean_len просто удаляет '\' 'и' b'

Затем я использую data = connection.recv(int(bytes_len) Но он выводит данные как

Waiting on connection...
---------------------------------------------
Connection Accepted
Connection received from... ('192.168.1.89', 41568)
BYTES_LEN_RECV:  9640320 
METADATA_RECV:  m240,second_attempt,requalify,4,4,4
BYTE_ARRAY_RECV:  b'' #THIS IS THE ISSUE
Sending Response
Closing Connection to  ('192.168.1.89', 41568)

Я посылаю такую ​​строку из приложения, за ней следует байтовый массив

printWriter.write(String.valueOf(bytes.length));
printWriter.flush();
printWriter.write(metadata);
printWriter.flush();
printWriter.close();

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
bufferedOutputStream.write(bytes,0,bytes.length);
bufferedOutputStream.flush();
bufferedOutputStream.close();
socket.close();

Можно ли просто так долго не отправлять байтовые массивы?Или я пропустил какой-то важный неизвестный шаг?

1 Ответ

0 голосов
/ 28 сентября 2019

Не читайте сокет несколько раз.Измените код так, чтобы сначала вы взяли необработанные байты из буфера, а затем обработали байты любым удобным вам способом.

data = connection.recv(1024)
data = clean_data(data)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...