從冰淇淋三明治升級到果凍豆後,客戶端(Galaxy Nexus)和自定義服務器之間似乎出現時間問題。這裏是一般流程:套接字關閉時間
- 客戶端打開插座,問題HTTP GET到服務器
- 服務器接受,開始新的線程,與HTTP報頭和200 OK響應。
- 服務器將(二進制)文件寫入套接字。
- 客戶端從套接字讀取數據並保存到文件。
- 服務器線程後寫的所有數據,它關閉套接字,並終止
這比之前的果凍豆更新過去的幾個月中運作良好。自更新以來,二進制傳輸大約70%的時間成功。當'serverSocket.getInputStream()。read'返回一個-1指示已達到流結束時,剩下的30%將失敗 。沒有數據被讀取,未引發錯誤異常,logcat中沒有任何異常。
當我在步驟#5中更改服務器行爲時,會出現計時問題的可能性。線程在寫完觀察到的問題後關閉了套接字。如果我關閉套接字,寫完後終止線程,並讓操作系統最終關閉套接字,然後它似乎一直工作。
我使用tcpdump和WireShark來查看成功和失敗情況下的數據包。在失敗的情況下,套接字在幾毫秒內關閉,而在成功的情況下,套接字關閉的時間爲四分之一秒或更多秒。這是因爲我們在套接字關閉時造成的延遲增加了我們成功的機會。
如果任何人有任何建議與我們可能會導致此問題或建議如何縮小問題,請隨時作出迴應。如果需要,我可以添加代碼示例。
請參閱我編輯的答案。 – Luis