что вызвало IOException и сломанный канал

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

[2012-06-17 00:03:26 - ddmlib] Broken pipe
java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:122)
    at sun.nio.ch.IOUtil.write(IOUtil.java:93)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:352)
    at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
    at com.android.ddmlib.Client.sendAndConsume(Client.java:575)
    at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
    at com.android.ddmlib.Client.requestAllocationStatus(Client.java:421)
    at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:837)
    at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:805)
    at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:765)
    at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:652)
    at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
    at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)

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

Ответы на вопрос(12)

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

 06 апр. 2015 г., 22:47
Кроме того, закройте все другие экземпляры Android Studio, открытые из которых вы запустили приложение.
 21 янв. 2016 г., 03:57
Я обнаружил, что просто с помощьюadb kill-server обратился к проблеме для меня.

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

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

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

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

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

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

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

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

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

Канал связи иногда может быть нарушен. (Есть более 100 возможных причин для этого)

Чтобы решить эту проблему: перезапустите эмулятор (AVD). Возможно, вам придется немного подождать (~ 1мин ??), чтобы Eclipse смог восстановить канал Pipe, и ваш Log Cat вернется. В противном случае перезапустите Eclipse & amp; эмулятор, чтобы избавиться от этой ошибки.

 06 окт. 2012 г., 21:25
Я перезапустил эмулятор, но все еще имел эту проблему. Я смог получить хороший канал, перейдя к менеджеру AVD, удалив AVD и создав новый. Не знаю почему, но это решило проблему.
 07 окт. 2012 г., 00:12
если AVD не работает, попробуйте открыть AVD Manager & gt; Начать .. & gt; установите флажок «Стирать пользовательские данные» сбросить AVD
 22 июн. 2014 г., 14:41
Плохое предположение. Исключение проясняет, что он использует сокет, а не трубу.

«сломанная труба»; означает, что вы записали данные в соединение, которое уже было закрыто узлом.. По сути, это ошибка протокола приложения.

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

 19 июн. 2012 г., 23:34
Программа на другом конце закрыта или пользователь остановил запрос. Например, нажмите на ссылку на html-странице, и браузер закроет все остальные ожидающие запросы, после чего сервер столкнется с этим «Сломанной трубой». исключения.
 manuzhang20 июн. 2012 г., 10:59
Поэтому я сомневаюсь, почему это произошло, когда я просто запустил приложение на эмуляторе?
 manuzhang17 июн. 2012 г., 11:35
Так почему же клиент может быть закрыт на другом размере?
 20 авг. 2015 г., 11:36
Почему не о чем беспокоиться, когда вы пытались записать в сокет, который одноранговый узел уже закрыл? Не являются ли ошибки протокола приложения какой-либо проблемой?
 20 июн. 2012 г., 11:04
Глядя на трассировку стека, я думаю, что эмулятор разорвал соединение с IDE (?). Может быть, потому что он не был готов или вместо него была загружена новая версия?

Самая распространенная причина, по которой у меня возникла "сломанная труба" является то, что одна машина (из пары, связывающихся через сокет), отключила свой конец сокета, прежде чем связь была завершена Примерно половина из них была из-за того, что программа, взаимодействующая с этим сокетом, была прервана

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

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

К вашему сведению: «труба» и «сокет» это термины, которые иногда взаимозаменяемы.

 22 июн. 2014 г., 14:43
Если программа отправляет данные, а затем закрывает сокет, сокет продолжает отправлять данные, пока все они не будут подтверждены или не произойдет сбой. Добавление пауз в сетевые программы только показывает неправильное понимание основной проблемы. Это ничего не решает.

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

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

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

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

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

 27 окт. 2014 г., 11:31
Это единственное решение, которое сработало для меня. У меня была эта проблема при запуске Eclipse в гостевой учетной записи и в моей учетной записи пользователя. После того, как я отключил Eclipse в моей учетной записи гостя, проблема была решена.
 28 окт. 2014 г., 20:10
В моем случае это была Android Studio, которая работала параллельно с Eclipse.

то эта ошибка будет выдана eclipse. Так что даже если вы выберете устройство через DDMS, оно выдаст эту ошибку.

Это нормально.

Ваш ответ на вопрос