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