Broken pipe android studio

Что вызвало IOException и Broken pipe

Мой AVD имеет API 15, я не знаю, почему, но следующее сообщение продолжает появляться, когда я запускаю приложение на эмуляторе. Кажется, что это не вызвало никаких проблем, кроме сообщения об ошибке в консоли.

Что может быть причиной?

Если кто-то использует одновременно eclipse и android studio, эта ошибка будет выбрана eclipse. Поэтому, даже если вы выберете устройство через DDMS, он попытается выбросить эту ошибку.

Старый вопрос, но все еще актуальный, и я не видел другого ответа с этой информацией:

Для меня это произошло, когда другой Eclipse работал одновременно, а DDMS конкурировал за тот же сокет, что и eclipse, пытающийся подключиться к Android-устройству.

Решение заключалось в закрытии другого Eclipse. Надеюсь, это поможет кому-то.

Обновление . Вероятно, лучшим решением является отредактировать порт DDMS другого затмения на том, что вы не используете. Так что это вне гонки.

Это случилось со мной, когда у меня были оба monitor и Eclipse ADT. Попробуйте закрыть все связанные с Android вещи, а затем выполните adb kill-server && sleep 5 && adb devices а затем снова запустите свой инструмент (Eclipse / Ant / AS).

«Сломанная труба» означает, что вы написали данные в соединение, которое уже было закрыто одноранговым узлом. Решение: не надо. Это, по сути, ошибка протокола приложения.

Я предполагаю, что клиент (Eclipse) обменивается данными с сервером (вашим эмулятором) по протоколу Pipe (этот протокол хорошо знает, чтобы передать 2 процесса на одном компьютере).

Иногда канал связи может быть сломан. (Для этого есть еще 100 причин)

Чтобы решить эту проблему: перезапустите эмулятор (AVD). Возможно, вам придется подождать минуту (

1 мин ??), поэтому Eclipse может восстановить канал трубы, и ваш Log Cat вернется. В противном случае перезапустите оба Eclipse & emulator, чтобы избавиться от этой ошибки.

Самая распространенная причина, по которой я столкнулся с «сломанной трубой», заключается в том, что одна машина (из пары, сообщающейся через сокет) закрыла конец разъема до того, как связь была завершена. Около половины из них были связаны с тем, что программа, сообщающая об этом сокете, прекратилась.

Если программа, отправляющая байты, отправляет их и немедленно выключает сокет или завершает себя, возможно, что сокет перестает функционировать до того, как байты будут переданы и прочитаны.

Попробуйте помещать паузы в любом месте, где вы закрываете сокет, и перед тем, как разрешить программе завершить работу, чтобы узнать, помогает ли это.

FYI: «pipe» и «socket» – это термины, которые иногда используются как взаимозаменяемые.

Я заметил это часто (каждые 5 минут или около того). Частота, казалось, увеличивалась, если у меня было как физическое устройство, так и эмулятор.

Остановка эмулятора и использование только физического устройства для отладки перестали происходить так часто – теперь я вижу его только один или два раза в день.

Читайте также:  Убрать кнопку меню с экрана андроид

Чтобы разрешить это, когда это произойдет, вам не нужно закрывать эмулятор или перезагружать устройство. Отключение и отключение режима USB-отладки должно заставить его снова отображаться под adb.

Я долгое время боролся с этой проблемой. Всякий раз, когда я хотел отлаживать мобильное приложение Android с помощью инструмента отладки Chrome, я отключился каждые 5 минут.

Я узнал, что причиной этого является другой процесс, связанный с подключением к мобильному телефону, который работает в ОС, что нарушает связь между мобильным телефоном и ОС.

Я использую Macbook Pro, и я запускал IntelliJ IDEA debugger + Android File Transfer (не знал, что это работает) и инструмент отладчика Chrome. Когда я закрыл процесс передачи файлов Android с помощью инструмента «Монитор активности», все работало хорошо, больше не было разъединения между мобильным телефоном и ОС. Мое предложение – проверить, всегда ли вы используете другой процесс Android.

Я использовал как Android Studio, так и DDMS. Закрытие DDMS устранило проблему для меня.

Перезапуск Android Studio не повлиял.

В случае, если кто-либо еще не нашел никакого решения. В затмениях Neon это произошло, когда у меня было два DDMS-баночки в каталоге плагинов. У меня были andmore.ddms.jar и com.android_ddms.jar. Удаление одного разрешает ошибку, я думаю, они оба конкурируют за подключение к тому же порту.

Исключение «Сломанная труба» возникает, когда соединение сокета закрывается клиентом с другой стороны. Большую часть времени это не о чем беспокоиться.

В моем случае я удаляю .android в своем домашнем каталоге. Ничего страшного.

Источник

Solved: Failure calling service package: Broken pipe (32)

Aug 14, 2019 · 2 min read

If you usually like to run your app with an emulator, you might come across this error sometime. When attempting to run your app on an android emulator after build, you might receive this error message: com.android.ddmlib.InstallException: Unknown failure: cmd: Failure calling service package: Broken pipe (32)

You can resolve this by deleting the name of the virtual device you’re running your app on and reinstalling a newer one as follows:

Step 1: Open Android Studio.

Step 2: On the welcome screen, click on Configure and select AVD Manager from the drop down.

Step 3: Select the device you are running your app on and right click.

Step 4: Click on delete.

Step 5: Create a new Virtual Device

Step 6: Click on the device you want to run your app on from the list of hardware devices listed and click on next to download and then next to finish creating the device.

NB: You do not need to download a system image again since you downloaded it for the former virtual device you created.

Step 7: Finally, build your app and run it on the new Virtual Device.

Great! And that’s all there is to this. We have successfully resolved this error and your app should be working now.

Читайте также:  Умные часы по которым можно разговаривать совместимые с android без симки

I will be writing new posts of subsequent errors I faced working on my React native app and how I resolved them!

Feel free to drop your questions and feedback in the comments section OR you can hit me up on Twitter.

Источник

Android: запись не удалась: EPIPE (Broken pipe) Ошибка при записи файла

Я попытался сделать скриншот экрана Android программно. Я сделал следующий код:

java.io.IOException: write failed: EPIPE (Broken pipe)

Пожалуйста, кто-нибудь может помочь? Я уже проверил другие сообщения, и я не нашел ничего, что могло бы решить мою проблему.

РЕДАКТИРОВАТЬ:

Обратите внимание, что ошибка происходит в строке os.write() .

Проблема EPIPE обычно возникает, когда вы либо пытаетесь выполнить команду, которая требует корневых разрешений ( getRuntime().exec ) в вашем случае на устройстве без нее или одновременно запускает несколько корневых команд. Если вы работаете над эмулятором и вам нужно его root, я думаю, вы можете попробовать это, пока эмулятор работает:

Проблема в том, что ваше приложение не имеет системных разрешений для доступа к поверхностному flinger (который использует экранный буфер и hw-декодер для рендеринга вашего видеофайла). Чтобы иметь эти разрешения, вам нужно создать (и подписать) ваше приложение как системное приложение и найти его в папке system / priv-app. Кроме того, для этого системного приложения необходимо добавить следующие разрешения:

Обратите внимание на части coreApp=»true» android:sharedUserId=»android.uid.media» .

И вам нужно будет добавить .

Пожалуйста, проверьте это также: Разрешение отказа: не удается получить доступ к SurfaceFlinger

Источник

Ошибка «client_loop: send disconnect: Broken pipe»

Вас тоже бесит постоянно отваливающееся соединение SSH? Меня это пипец как бесит. Особенно когда пишешь длинную команду, нажимаешь Enter, а тебе вываливается «client_loop: send disconnect: Broken pipe». И снова подключаешься.

Поиск по интернетам ничего не давал кроме того, что тут и там советовали раскомментировать директиву ClientAliveInterval, причем советовали установить значение в 300, причем не объясняя почему именно 300 и что вообще такое ClientAliveInterval.

Само собой я последовал совету и поставил ClientAliveInterval равным 300. Соединение как разрывалось до этого, так и дальше продолжало разрываться. А потом я где-то нашел совет добавить директиву ServerAliveInterval. В итоге сервер перестал отвечать и пришлось восстанавливать бэкап. Тем самым в трубу улетели кучи и кучи настроек, поскольку бэкап был один единственный и там была система в дефолтном состоянии.

За что отвечает директива ClientAliveInterval?

Значение этой директивы определяет через какой промежуток времени начиная с момента простоя клиенту будет отправлен запрос отклика. По умолчанию ClientAliveInterval равен 0, то есть сервер не будет ничего делать.

Простыми словами. У вас открыт терминал, вы подключены к серверу. Выполнили пару команд и ушли читать мануал. Допустим ClientAliveInterval у нас 30, это значи через 30 секунд после последней нашей активности, сервер проверит подключены ли мы к серверу, получив отклик от клиента, сервер не будет разрывать соединение.

Ну вроде как все понятно. Но! Чисто гипотетически мы можем быть подключены не через самое надежное соединение. Например через USB-модем в зоне со слабым сигналом. Предположим в какой-то момент сигнал упал, а сервер нам шлет запрос. Клиент его не получит. Тут на сцену выходит другая директива.

Читайте также:  Полное резервное копирование android 4pda

Директива ClientAliveCountMax

По умолчанию значение ClientAliveCountMax равно 3. То есть получается что сервер отправит нам максимум три запроса без подтверждения и уже только тогда закроет соединение.

Если ClientAliveInterval равен 30, а ClientAliveCountMax 3, то сервер закроет соединение через 90 секунд, то есть через полторы минуты, если наш модем за это время не восстановит соединение.

Как видите мы гибко можем манипулировать настройками этих двух директив в зависимости от обстоятельств.

Директива TCPKeepAlive

По умолчанию эта директива имеет значение yes. При активации ClientAliveInterval директиву TCPKeepAlive имеет смысл перевести в no. По сути сама по себе директива ничем особенным не помогает и не мешает, просто по мнению спецов, она может помочь злоумышленникам в атаке на сервер.

Добавляем настройки

У меня в Ubuntu Server 20.04 в файле /etc/ssh/sshd_config присутствует

Поэтому я просто создаю новый файл

И уже туда втыкаем

Я думаю этих настроек боле чем достаточно чтобы соединение долго не отваливалось в течении 15 минут. Это может показаться чрезмерным, но бывает всякое.

Источник

java — Android to PHP: epipe Broken Pipe / поток закрыл публикацию фрагментированных многокомпонентных данных формы с использованием httpurlconnection

У меня проблема с загрузкой видеофайлов из приложения для Android с помощью HttpUrlConnection на сервер и обработкой с помощью PHP. Это успешно выполняется для видеофайлов размером до 12 МБ путем отправки составного почтового запроса, но не удается для файла размером 16 МБ с ошибкой нехватки памяти.

Я попытался устранить ошибку нехватки памяти с помощью чанкинга с помощью setChunkedStreamingMode (1024) или с помощью setFixedLengthStreamingMode (contentLength). Однако это приводит к таким ошибкам, как epipe (сломанная труба) и закрытый поток. Я не знаю, как справиться с этим.

Что я пробовал

Я впервые попробовал использовать Кевина Савицкого HTTP-запрос что привело к ошибке нехватки памяти для больших файлов. Когда я реализовал chunking или setFixedLengthStreamingMode, это привело к ошибке epipe break pipe.

Код Android в AsyncTask:

LogCat:

Затем я попытался отправить файл только без библиотеки, код из Переполнение стека , что приводит к закрытой ошибке потока.

Код Android:

Logcat

Вопросы
Итак, мои вопросы:
Как решить проблему с закрытием соединения / потока при порции?

Если проблема с подключением связана с проблемами на стороне сервера, как я могу узнать, что вызвало это, и решить их? Обратите внимание, что upload_max_filesize составляет 512 МБ, поэтому проблема не в размере. Кроме того, 12 МБ работает и 16 МБ не работает.

Я не уверен, как обрабатывать фрагментированные данные с сервера с помощью PHP. Для файла 12 Мб, который был успешно загружен без разбивки, я хорошо справляюсь с move_uploaded_file($_FILES[‘file’][‘tmp_name’], $url); , Какой код мне нужен для обработки фрагментированных данных?

Решение

Как указано Вот Вы должны позвонить либо setFixedLengthStreamingMode(len) когда длина тела известна заранее, или setChunkedStreamingMode (0) когда это не так.
Об ошибке сломанной трубы, обратите внимание, что, если возможно, Android будет повторно использовать старое соединение сокета поскольку установление соединения является ресурсоемкой операцией в мобильной среде. Попробуйте принудительно выполнить POST через новое соединение:

Источник

Оцените статью