我正在制作一个用于播放在线广播的 Android 应用程序。我正在使用 Java Socket 进行连接,它是 InputStream 来读取流数据。实际上有没有长度的HTTP请求和响应,内容类型如audio/mpeg。
一切正常,直到带宽变低(使用移动互联网或连接到慢速/非常远程的服务器)- InputStream 可能会在任意时间返回 EOF (-1)。
请您解释一下此类行为的性质以及可能的处理方法。我设置了读取超时(Socket.setSoTimeout),那么如果情况是低带宽,为什么它不会抛出超时异常?也许还有其他套接字选项可能有帮助?
最佳答案
当您连接客户端然后它断开连接并且您试图从中读取时,就会发生这种情况。我处理这个询问消息的长度,如果它是负数,我重新启动连接。
例如
//CLIENTS LOOP
while (true)
{
...
//MESSAGE LOOP
while ( true )
{
System.out.println(" -> WAITING FOR INCOMING MESSAGE.. ");
len = inputStream.read(buffer_msg);
if ( len < 0 )
break;
...
关于Java Socket 在低带宽时返回 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30719254/