我試圖歌曲數據寫入套接字但之後大約66338個字節以下異常被拋出:寫入插座X字節失敗後
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的速度崩潰。
你能發表相關的代碼嗎?你更有可能得到這樣的幫助。 – cdmckay 2011-05-17 03:29:47
我發佈了一些僞代碼,以便更好地瞭解發生了什麼。謝謝。 – Nick 2011-05-17 18:28:48