【发布时间】:2016-12-07 10:48:22
【问题描述】:
我想从服务器播放 mp3 文件 服务器端代码:
if (uri.contains("mp3")) {
FileInputStream fis = null;
try {
fis = new FileInputStream(audioFile.getAbsoluteFile());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return newFixedLengthResponse(Response.Status.OK, MIME_TYPES.get("mp3"), fis,audioFile.getTotalSpace());
}
当我打电话时
192.168.0.7:XXXX/mp3
错误抛出,但在浏览器中播放了 mp3 文件,为什么会出现此错误:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:112)
at java.net.SocketOutputStream.write(SocketOutputStream.java:157)
at fi.iki.elonen.NanoHTTPD$Response.sendBody(NanoHTTPD.java:1694)
at fi.iki.elonen.NanoHTTPD$Response.sendBodyWithCorrectEncoding(NanoHTTPD.java:1667)
at fi.iki.elonen.NanoHTTPD$Response.sendBodyWithCorrectTransferAndEncoding(NanoHTTPD.java:1657)
at fi.iki.elonen.NanoHTTPD$Response.send(NanoHTTPD.java:1624)
at fi.iki.elonen.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:957)
at fi.iki.elonen.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:192)
at java.lang.Thread.run(Thread.java:761)
【问题讨论】:
-
我也有类似的问题。我认为,由于浏览器不知道第一次调用的大小,它们只会得到文件的第一个垃圾作为第一个响应。然后他们尝试恢复下载(内容范围)并发生此异常。由于第一个连接已被删除,但 INITIAL 响应的缓冲写入器仍尝试写入输出流,因此会发生此异常。第二个请求 (PARTIAL_CONTENT) 得到一个新的响应。这是我的理论,但需要证明(调试)它!