java.net.SocketException: ошибка sendto: EPIPE (сломанный канал) через подключение для передачи данных к локальному хосту

В моем приложении для Android я хочу прочитать аудиопоток и проанализировать его метаданные крика. У меня это работает с использованием StreamProxy, как в проекте NPR: http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java?r=e4984187f45c39a54ea6c88f71197762dbe10e72

Проблема в том, что он не работает через подключение для передачи данных. У NPR такая же проблема.

Подводя итог, этот прокси работает как локальный веб-сервер, создавая интерфейс между приложением и удаленным потоком. Он работает на локальном хосте 127.0.0.1 со сгенерированным пользовательским портом. Когда сервер считывает потоковые данные, он копирует их в приложение, как вы можете прочитать в строке 223 в StreamProxy:

client.getOutputStream().write(buff, 0, readBytes);

Однако эта строка создает это исключение для подключения к данным:

java.net.SocketException: sendto failed: EPIPE (Broken pipe)

Я не эксперт в сокетах и ​​потоковой передаче. Я не понимаю, в чем разница между Wi-Fi и подключением для передачи данных в этом случае.


person Romain Piel    schedule 21.02.2013    source источник
comment
Привет, даже я использую прокси-канал для воспроизведения потоковой передачи. Выдает эту ошибку на некоторых устройствах. Вы нашли какое-либо решение для этого.   -  person vijaykumarg    schedule 17.05.2013
comment
@romain-piel Вы когда-нибудь выясняли, в чем здесь проблема? У меня такая же проблема, но не могу найти решение.   -  person Nick    schedule 20.05.2013
comment
нет :-/ это очень странно. Я сейчас использую соединение параллельно с потоковой передачей. Не идеально, но, по крайней мере, работает в любых ситуациях.   -  person Romain Piel    schedule 20.05.2013
comment
@romain-piel Не могли бы вы поделиться своим решением. Мой вариант использования точно такой же, как у вас, и я несколько дней искал решение.   -  person adi    schedule 20.10.2013
comment
@adi и Ромен: У кого-нибудь есть решение для этого? У меня очень похожий вариант использования, и я не могу найти способ его решить.   -  person Marty    schedule 22.01.2015


Ответы (1)


Ниже несколько решений!

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

Обновить Java

Если вы не хотите иметь проблем с несовместимостью, я рекомендую вам установить последнюю версию среды выполнения Java (jre 7.0_05). Прежде чем вы это сделаете, рекомендуется удалить другие предыдущие версии. Если ваша операционная система работает в версии 32bit, установите только версию 32bit (x86). Если у вас 64bit, установите оба, начиная с 64bit, а затем 32bit именно в этом порядке.

Отключить ненужные сетевые хосты

Hamachi и Virtual Box могут быть одними из них. Они могут замедлять или мешать вашему соединению. Войдите в панель управления сетью и нажмите «modify network cards» (или что-то подобное). Щелкните правой кнопкой мыши на том хосте, который вам нужно отключить, а затем просто нажмите «Отключить».

Отключите брандмауэр

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

Это также работает для:

> Internal exception: java.net.SocketException: Software  caused
> connection abort: socket write error
person Dharmendra    schedule 06.01.2014