【发布时间】:2011-06-07 09:43:50
【问题描述】:
我正在向套接字写入一堆数据,但是,在写入大约 64k 之后,套接字被关闭并出现错误“对等连接重置”。我相信正在发生的事情是,当尝试读取比套接字可用的更多数据时,正在读取套接字(Android 媒体播放器)的内容正在死亡。这是一首正在流式传输的歌曲,当 id3 标签相当大时,它会失败。但是,当我从歌曲中删除 id3 信息时,它工作正常。
由于我认为当没有足够的数据时读取端会失败,所以我想知道是否可以在调用 socket.accept() 接受连接以读取它之前将一堆数据写入套接字。我的想法是,当媒体播放器连接到套接字时,将有足够的数据供它读取,因此不会崩溃。那么你可以在accept()之前调用write()吗?
这是我当前代码的一些伪代码:
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);
}
【问题讨论】: