Я пытаюсь записать данные песни в сокет, однако после примерно 66338 байт выдается следующее исключение:
E/ ( 1016): Connection reset by peer
E/ ( 1016): java.net.SocketException: Connection reset by peer
E/ ( 1016): at org.apache.harmony.luni.platform.OSNetworkSystem.writeSocketImpl(Native Method)
E/ ( 1016): at org.apache.harmony.luni.platform.OSNetworkSystem.write(OSNetworkSystem.java:723)
E/ ( 1016): at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:578)
E/ ( 1016): at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
E/ ( 1016): at com.myprogram.StreamProxy.processRequest(StreamProxy.java:307)
E/ ( 1016): at com.myprogram.StreamProxy.run(StreamProxy.java:145)
E/ ( 1016): at java.lang.Thread.run(Thread.java:1096)
Это происходит только с определенными песнями, и если одна песня выполняет все песниво всем альбоме делай то же самое.Мне интересно, имеет ли это какое-либо отношение к информации заголовка песни?
Любые предложения о том, как отладить или исправить это, будут с благодарностью.Спасибо.
РЕДАКТИРОВАТЬ: Вот код, который читает из InputStream и записывает обратно в сокет.Код довольно прост, поэтому я не совсем уверен, почему он будет зависать, если соединение не будет закрыто на принимающей стороне.(Примечание: это только psuedocode, но он дает общее представление)
InputStream data = realResponse.getEntity().getContent();
Socket socket = new ServerSocket(port, 0, InetAddress.getByAddress(new byte[] {127,0,0,1}));
socket.setSoTimeout(5000);
port = socket.getLocalPort();
Socket client = socket.accept();
...some code...
byte[] buff = new byte[1024 * 50];
while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {
client.getOutputStream().write(buff, 0, readBytes);
}
Кроме того, это может иметь какое-либо отношение к заполнению буфера сокетов?Тем более, что кажется, что он каждый раз падает на 64k.