Android 纳米httpd中的SocketException
我想从服务器播放mp3文件 服务器端代码:Android 纳米httpd中的SocketException,android,nanohttpd,Android,Nanohttpd,我想从服务器播放mp3文件 服务器端代码: if (uri.contains("mp3")) { FileInputStream fis = null; try { fis = new FileInputStream(audioFile.getAbsoluteFile()); } catch (FileNotFoundException e) { e.printStackTrace();
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)
管道破裂
通常发生在某人(此处为服务器)试图在另一侧(此处为客户端)关闭的套接字中写入时
您可能应该使用(文件大小)而不是(分区大小)
您还可以尝试使用分块响应:
return newChunkedResponse(Response.Status.OK, MIME_TYPES.get("mp3"), fis);
我尝试了您的建议,但仍然存在错误“return newChunkedResponse(Response.Status.OK,MIME_TYPES.get(“mp3”),fis)”;“这次发生在哪里,您可以发布stacktrace吗?当我拨打192.168.0.7:XXXX/mp3时,由于某种原因,浏览器似乎提前关闭了流。mp3播放完整了吗?其他浏览器会怎么样?对于其他类型的文件(浏览器是否完全下载)?mp3播放正常会影响整个播放,但我不明白为什么会发生此错误。我也有类似的问题。我认为,由于浏览器在第一次调用时不知道大小,所以他们只会在第一次响应时收到文件的第一个垃圾。然后他们尝试恢复下载(内容范围),出现此异常。由于第一个连接已断开,但初始响应的缓冲写入程序仍尝试写入输出流,因此会发生此异常。第二个请求(部分内容)获得新响应。这是我的理论,需要证明(调试)它!