【发布时间】:2011-05-18 18:17:37
【问题描述】:
我正在尝试将歌曲数据写入套接字,但是在大约 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 读取并写回套接字的代码。代码非常简单,所以我不确定为什么它会崩溃,除非在接收端关闭连接。 (注:这只是伪代码,但给出了大致思路)
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 崩溃。
【问题讨论】:
-
能贴出相关代码吗?你更有可能以这种方式获得帮助。
-
我发布了一些伪代码,以便更好地了解正在发生的事情。谢谢。