2011-07-31 30 views
5

Quiero leer datos de un protocolo de transmisión de hielo. El problema es que todas las bibliotecas que he probado (dsj, MP3SPI) usan HttpUrlConnection para hacer esto. Sin embargo, lo he probado en mi windows 7 y yo ' he recibido "Respuesta http no válida" que es causa normal "HTTP 200 OK" es diferente de "ICY 200 OK". Sé que esto se puede lograr con sockets pero soy un principiante así que si alguno puede proporcionar unas pocas líneas de código para Puedo hacerte una idea que agradeceré. También si tienes algunas soluciones, por favor compártelas. ¡Gracias y que tengas un buen día!¿Cómo leer el protocolo helado en Java?

Este es el código que he intentado:

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

El error es:

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 

Lo sentimos figura no podía encontrar la manera de que el formato de código o añadir nueva línea.

Edit: incluido el código de su comentario a continuación ..

+0

Forma de dar la bienvenida a un nuevo usuario: 2 votos a favor! ¿Crees que volverá y contribuirá al SO? – SyntaxT3rr0r

+0

Bueno, ya que ustedes no conocen la respuesta, no estoy sorprendido. – aureliangtx

+0

por cierto, actualmente estás en -1 porque tienes dos votos a favor y en contra: soy yo quien te dio +1. – SyntaxT3rr0r

Respuesta

3

MP3SPI debería funcionar bien en todos los sistemas.

Si desea extraer los metadatos ICY, marque este código: https://gist.github.com/1008126 Hay un IcyInputStream que abre la URL y devuelve un InputStream regular que puede adjuntar a un decodificador y también extrae metadatos como Artista y Título de pista.

He escrito el código utilizando la información de here.

+0

Pero tulskiy ¿por qué recibo una respuesta http no válida de HttpUtlConnection? Vi un código en la red que usa HttpUrlConnection, pero ¿por qué recibo ese error? Entonces, el código devuelto es -1. – aureliangtx

+0

Actualice su pregunta para incluir su código, si desea una respuesta a eso ... – nfechner

+0

@aureliangtx: porque SHOUTCast no es HTTP real, usted lo dijo usted mismo: devuelve ICY 200 OK. IceCast utiliza HTTP normal y HttpURLCOnnection puede analizar sus encabezados, SHOUTCast utiliza el código de retorno personalizado. Use la URLCOnnection abstracta en lugar de HttpUrlConnection. –

5

probar este lugar:

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

Esto funcionó para mí perfectamente!

Cuestiones relacionadas