在android上实现http流客户端

时间:2013-12-17 20:11:21

标签: java android http comet http-streaming

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

我有一个彗星流媒体服务器 - 它会获取一个http请求,保持打开并偶尔刷新数据。

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

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

编辑: 目前我有两种解决方案:

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

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

1 个答案:

答案 0 :(得分:2)

所以解决方案是:

使用标准的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”。 当然,您必须处理异常和有问题的情况 - 而且您可能还想决定发送流式消息的协议。

相关问题