2011-07-31 21 views
5

Akış buzlu protokolünden veri okumak istiyorum. Sorun, denediğim tüm kitaplıkların (dsj, MP3SPI) bunu yapmak için HttpUrlConnection kullanmasıdır. Windows 7'de denedim. ve "Normal http yanıtı" normal neden olan "HTTP 200 OK", "ICY 200 OK" den farklıdır. Bunun soketlerle gerçekleştirilebileceğini biliyorum, ancak yeni başlayanlar için bir satır varsa Takdir edeceğim bir fikrim var.Ayrıca bazı çözümleriniz varsa bunları paylaşın.Thanx ve güzel bir gün geçirin!Java'da icy protokolü nasıl okunur?

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

hatadır: kodunu biçimlendirmek veya satır başı karakteri nasıl ekleneceği

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 

Maalesef edemedim rakam dışarı

Bu

denedim koddur.

Düzenleme: aşağıda Yorumlarınız kodu ..

+0

Yeni bir kullanıcıyla tanışmanın yolu: 2 downvotes! Sence geri gelecek ve SO'ya katkıda bulunacak mı? – SyntaxT3rr0r

+0

Peki sizler cevabı bilmediğiniz için şaşırmadım. – aureliangtx

+0

bu arada, şu anda -1 seviyesindesiniz çünkü iki downvotunuz var ve bir upvote: Size +1 veren kişi benim. – SyntaxT3rr0r

cevap

3

MP3SPI tüm sistemlerde sorunsuz çalışır dahil.

ICY meta verilerini ayıklamak istiyorsanız, şu kodu kontrol edin: https://gist.github.com/1008126 URL'yi açan ve bir kod çözücüye ekleyebileceğiniz düzenli bir InputStream döndüren ve ayrıca Sanatçı ve Parça başlığı gibi meta verileri ayıklayan bir IcyInputStream var.

Bu kodu here'dan bilgi kullanarak yazdım.

+0

Ama tulskiy neden HttpUtlConnection adresinden geçersiz http yanıtı alıyorum? HttpUrlConnection kullanan ağdaki kodu gördüm ama neden bu hatayı alıyorum? – aureliangtx

+0

Sorunuzu, kodunuza eklemek için güncelleyin .. – nfechner

+0

@aureliangtx: SHOUTCast gerçek bir HTTP olmadığından, kendiniz söylediniz: ICY 200 OK. IceCast sunucuları normal HTTP kullanır ve HttpURLCOnnection başlıklarını ayrıştırabilir, SHOUTCast özel dönüş kodunu kullanır. HttpUrlConnection yerine soyut URLCOnnection kullanın. –

5

yerine bu deneyin:

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

Bu mükemmel benim için çalıştı!