Android 纳米httpd中的SocketException

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

我想从服务器播放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)

管道破裂
通常发生在某人(此处为服务器)试图在另一侧(此处为客户端)关闭的套接字中写入时

您可能应该使用(文件大小)而不是(分区大小)

您还可以尝试使用分块响应:

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播放正常会影响整个播放,但我不明白为什么会发生此错误。我也有类似的问题。我认为,由于浏览器在第一次调用时不知道大小,所以他们只会在第一次响应时收到文件的第一个垃圾。然后他们尝试恢复下载(内容范围),出现此异常。由于第一个连接已断开,但初始响应的缓冲写入程序仍尝试写入输出流,因此会发生此异常。第二个请求(部分内容)获得新响应。这是我的理论,需要证明(调试)它!