我正在向一個套接字寫入一堆數據,然而,在64k左右的東西寫入後,套接字被關閉,出現「對等連接重置」錯誤。我相信發生的事情是讀取套接字(Android媒體播放器)時嘗試讀取比套接字中提供的更多數據時正在死亡。這是一首正在流式播放的歌曲,當id3標籤相當大時,它會失敗。但是,當我從歌曲中刪除id3信息時,它工作正常。關閉錯誤的套接字
因爲我認爲在沒有足夠的數據時讀取端失敗,所以我想知道是否可以在調用socket.accept()接受連接來讀取它之前將一堆數據寫入套接字。我的想法是,當媒體播放器連接到套接字時,將有足夠的數據供它讀取,因此不會崩潰。那麼你可以在accept()之前調用write()嗎?
這裏是我當前的代碼一些psudocode:
ServerSocket socket = new ServerSocket(port, 0, InetAddress.getByAddress(new byte[] {127,0,0,1}));
socket.setSoTimeout(10000);
port = socket.getLocalPort();
Socket client = socket.accept();
...
while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {
client.getOutputStream().write(buff, 0, readBytes);
}
謝謝!現在我正在使用socket.accept()來創建客戶端(如您在上面的僞代碼中看到的那樣)。由於此時我不想調用accept(),創建客戶端然後調用accept()打開連接的最佳方法是什麼? – Nick 2011-06-07 02:01:03
@Nick accept()不會創建客戶端。它*接受*客戶。客戶端創建客戶端並進行連接。只要在準備好時調用accept()即可。 – EJP 2011-06-07 02:22:19