Java Socket 在低带宽时返回 EOF

标签 java android sockets

我正在制作一个用于播放在线广播的 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/

相关文章:

java - 在服务器端膨胀序列化对象时发生转换错误

sockets - 在 linux 中测试一个 socket 是否打开

java - 当两个方法都出现在同一个类中时,为什么一个 int... 变量包装成 long

java - kafka 流不与动态生成的类一起运行

java - 即使ECS AWS上有许多可用内核,Runtime.getRuntime()。availableProcessors()仍返回1

java - 如何将我的电话应用程序包含在 'open with' 列表中?

javascript - JS 到 PHP 套接字?

c# - 以文本形式返回数字

android - `Graphics Pss` 输出中的 `adb shell dumpsys meminfo` 是什么?

javascript - React Native WebView html <select> 无法在 Android 平板电脑上打开选项