Java Socket在低带宽上返回EOF

时间:2015-06-08 21:16:17

标签: java android sockets

我正在制作用于播放在线广播的Android应用。我使用Java Socket进行连接,并使用它的InputStream来读取流数据。实际上,没有长度的HTTP请求和响应,内容类型如audio / mpeg。

一切正常,直到带宽变低(使用移动互联网或连接到慢/非常远程服务器) - InputStream可以在任意时间返回EOF(-1)。

请你解释一下这种行为的性质以及处理这种行为的可能方法。我设置了读取超时(Socket.setSoTimeout),那么为什么在没有带宽的情况下它不会抛出超时异常呢?也许还有其他套接字选项可能会有所帮助?

1 个答案:

答案 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;

         ...