2013-12-17 44 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」作爲讀取的結果。 當然,你將不得不處理異常和有問題的情況 - 你也可能想要決定發送流信息的協議。