Как читать ледяной протокол в Java? - PullRequest
5 голосов
/ 31 июля 2011

Я хочу читать данные из потокового ледяного протокола. Проблема в том, что все библиотеки, которые я пробовал (dsj, MP3SPI), используют HttpUrlConnection для этого. Как бы то ни было, я пробовал это на своих Windows 7 и яЯ получил «Неверный HTTP-ответ», что является обычной причиной, так как «HTTP 200 OK» отличается от «ICY 200 OK». Я знаю, что это может быть достигнуто с помощью сокетов, но я новичок, поэтому, если таковые имеются, можно предоставить несколько строк кодатак что я могу получить идею, я был бы признателен. Также, если у вас есть какие-то решения, пожалуйста, поделитесь ими. Спасибо и хорошего дня!

Это код, который я пробовал:

URLConnection connection = new URL("89.47.247.59:8020").openConnection();
InputStream in = connection.getInputStream();
System.out.println("getting lots of bytes");
in.close();

Ошибка:

Exception in thread "main" java.io.IOException: Invalid Http response
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.jav‌​a:1328)
at javaapplication1.JavaApplication1.main(JavaApplication1.java:46) Java Result: 1

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

Редактировать: я включил код из вашего комментария ниже ..

Ответы [ 2 ]

5 голосов
/ 30 октября 2011

Попробуйте вместо этого:

URL url=new URL("89.47.247.59:8020");
Socket socket=new Socket(url.getHost(), url.getPort());
OutputStream os=socket.getOutputStream();
String user_agent = "WinampMPEG/5.09";
String req="GET / HTTP/1.0\r\nuser-agent: "+user_agent+"\r\nIcy-MetaData: 1\r\nConnection: keep-alive\r\n\r\n";
os.write(req.getBytes());
is=socket.getInputStream();

Это отлично сработало для меня!

3 голосов
/ 31 июля 2011

MP3SPI должен нормально работать на всех системах.

Если вы хотите извлечь метаданные ICY, проверьте этот код: https://gist.github.com/1008126 Существует IcyInputStream, который открывает URL-адрес и возвращает обычный InputStream, который вы можете прикрепить к декодеру, а также извлекает метаданные, такие как Artist и заголовок дорожки. .

Я написал этот код, используя информацию из здесь .

...