如何在Java中读取icy协议?

如何在Java中读取icy协议?,java,streaming,protocols,shoutcast,Java,Streaming,Protocols,Shoutcast,我想从流ICE协议读取数据。问题是,我尝试过的所有库(dsj、MP3SPI)都使用HttpUrlConnection来执行此操作。但是我在windows 7上尝试过,收到了“无效http响应”,这是正常的,因为“http 200 OK”与“icy 200 OK”不同.我知道这可以通过套接字来实现,但我是一个初学者,因此如果有人能提供几行代码,我会很感激。如果你有一些解决方案,请与我分享。祝你度过愉快的一天 这是我尝试过的代码: URLConnection connection = new URL

我想从流ICE协议读取数据。问题是,我尝试过的所有库(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
抱歉,无法理解如何格式化代码或添加换行符


编辑:我在下面包含了您评论中的代码。

MP3SPI应该可以在所有系统上正常工作

如果您想提取ICY元数据,请检查以下代码:有一个IcyInputStream可以打开URL并返回一个常规输入流,您可以将其附加到解码器,它还可以提取元数据,如艺术家和曲目标题

我使用中的信息编写了此代码。

请尝试以下方法:

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

这对我非常有效

但是tulskiy为什么我从HttpUtlConnection接收到无效的http响应?我在网上看到了使用HttpUrlConnection的代码,但是为什么我会收到错误?所以返回的代码是-1。@aureliangtx:因为SHOUTCast不是真正的http,所以你自己说了:它返回OK。IceCast服务器使用普通的HTTP和HttpURLCOnnection可以解析它们的头文件,应该使用自定义返回代码。使用抽象URLCOnnection而不是HttpUrlConnection。这是我尝试过的代码:URLCOnnection connection=newURL(“;InputStream in=connection.getInputStream();System.out.println(“获取大量字节”);in.close();。错误是:线程中的异常”main“java.io.IOException:javaapplication1.javaapplication1.main(javaapplication1.java:46)上的sun.net.www.protocol.Http.HttpURLConnection.getInputStream(HttpURLConnection.java:1328)上的Http响应无效”Java结果:1.抱歉,我不知道如何格式化代码或添加换行符。欢迎新用户的方法:2次否决票!你认为他会回来并为此做出贡献吗?既然你们不知道答案,我一点也不奇怪。顺便说一句,你目前处于-1,因为你有两次否决票和一次赞成票:我是给你+1的那个人。