【问题标题】:Implement http streaming client on android在android上实现http流客户端
【发布时间】:2014-01-05 18:44:21
【问题描述】:

如何在android上实现http流客户端?

我有一个彗星流媒体服务器 - 它接收一个 http 请求,保持它打开并不时刷新数据。

如何从 Android 发出 http post 请求并继续处理服务器发送给我的刷新(使用当前打开的连接)?请注意,响应标头包含:Transfer-Encoding:chunked

我尝试使用 HttpClient 和 HttpPost 以及 ChunkedInputStream 但无法以正确的方式处理这个问题 - 有没有办法在 回调 中处理这个问题> 基本方式,我的意思是在每次刷新时获取一些事件,然后处理当前内容?

已编辑: 目前我想到了两种解决方案:

1) 逐字节读取并搜索结束分隔符,一旦我得到结束分隔符,我就可以处理最后一条消息并继续阻塞读取操作的读取线程 - 直到下一个消息到达。

2) 发送消息的长度,然后发送消息本身(来自服务器),然后在我的 android 应用程序上,我将尝试通过读取 x 个字节(根据第一个长度 msg)来获取最后一条消息和之后让读取线程阻塞读取操作,直到下一条消息到达。

【问题讨论】:

    标签: java android http comet http-streaming


    【解决方案1】:

    所以解决办法是:

    使用标准 http 客户端,如 DefaultHttpClient 或 AndroidHttpClient,在处理请求时只需使用 Reader 的“读取”功能。 例如:

    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
    char[] msgsReadArray = new char[streamingArrayMaxCapacity];
    int currentCharsCount = 0;
    int currOffset = 0;
    int currMsgBytesLength = 0;
    while ((currentCharsCount = reader.read(msgsReadArray, currOffset , streamingArrayMaxCapacity - currOffset)) != -1 ) {
         String lastStreamingMsg = new String(msgsReadArray, 0, currMsgBytesLength);
         currOffset += currentCharsCount;
    }
    

    当连接关闭时,您将获得“-1”作为读取结果。 当然,您必须处理异常和有问题的情况 - 您可能还需要决定发送流式消息的协议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多