我正在向一个套接字写入一堆数据,然而,在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