2013-12-17 40 views
2

流客户端如何实现HTTP Android上的流式客户端?实现HTTP在Android

我有一个彗星流媒体服务器 - 它得到一个HTTP请求,在一段时间保持它的开放和刷新一次数据。

我怎样才能使从Android的一个HTTP POST请求,并保持其处理服务器发过来的刷新(与当前打开的连接)?请注意,响应报头包含:传输编码:分块

我试着HttpClient的和HttpPost和ChunkedInputStream工作,但以正确的方式不能处理这一点 - 有没有办法在处理这一个回调基本方式,我的意思是在每次刷新时获得一些事件,然后处理当前的内容?

编辑: 目前,有我已经想到了两个解决方案:按字节

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

2)发送消息的长度,然后消息本身(从服务器),然后在我的android应用程序,我会尝试通过读取x字节(根据第一个长度味精)得到最后一条消息,然后让阅读线程阻止读取动作,直到下一条消息到达。

回答

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”作为读取的结果。 当然,你将不得不处理异常和有问题的情况 - 你也可能想要决定发送流信息的协议。