2011-07-31 14 views
5

Chcę odczytać dane z strumieniowego protokołu icy. Problem polega na tym, że wszystkie biblioteki, które wypróbowałem (dsj, MP3SPI) używają HttpUrlConnection, aby to zrobić.Jednak próbowałem tego na moim Windows 7 i ja ' ve otrzymał "Nieprawidłowa odpowiedź http", co jest normalną przyczyną "HTTP 200 OK" różni się od "ICY 200 OK". Wiem, że można to osiągnąć dzięki gniazdom, ale jestem początkującym, więc jeśli ktoś może podać kilka linii o kodzie tak Mogę uzyskać pomysł, który powinienem docenić. Również, jeśli masz jakieś rozwiązania, udostępnij je.Thanx i miłego dnia!Jak odczytać oblodzony protokół w Javie?

Jest to kod, który Próbowałem:

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

Błąd jest:

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 

Niestety nie mogliśmy zrozumieć to, jak sformatować kod lub dodać przełamane.

Edycja: włączone kod z Twojego komentarza poniżej ..

+0

Sposób powitania nowego użytkownika: 2 downvotes! Myślisz, że wróci i przyczyni się do SO? – SyntaxT3rr0r

+0

Cóż, skoro nie znacie odpowiedzi, nie jestem zaskoczony. – aureliangtx

+0

przy okazji, obecnie masz -1, ponieważ masz dwa downvotes i jeden uptoot: jestem tym, który dał ci +1. – SyntaxT3rr0r

Odpowiedz

3

MP3SPI powinien działać na wszystkich systemach.

Jeśli chcesz wyodrębnić metadane ICY, sprawdź ten kod: https://gist.github.com/1008126 Istnieje IcyInputStream, który otwiera adres URL i zwraca zwykły InputStream, który można dołączyć do dekodera, a także wyodrębnia metadane, takie jak tytuł Artist and Track.

Napisałem ten kod, korzystając z informacji z here.

+0

Ale tulskiy dlaczego otrzymuję nieprawidłową odpowiedź http z HttpUtlConnection? Widziałem kod w sieci, które używają HttpUrlConnection, ale dlaczego otrzymam ten błąd następnie? SO zwróconym kodem jest -1. – aureliangtx

+0

Zaktualizuj swoje pytanie, aby dołączyć swój kod, jeśli chcesz uzyskać odpowiedź na to pytanie. – nfechner

+0

@aureliangtx: ponieważ SHOUTCast nie jest prawdziwym HTTP, sam to powiedziałeś: zwraca ICY 200 OK. IceCast obsługuje normalne HTTP i HttpURLCOnnection może analizować ich nagłówki, SHOUTCast używa niestandardowego kodu powrotu. Użyj abstrakcyjnego URLCOnnection zamiast HttpUrlConnection. –

5

Spróbuj to zamiast:

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(); 

ten pracował dla mnie idealnie!