从冰淇淋三明治升级到果冻豆后,客户端(Galaxy Nexus)和自定义服务器之间似乎出现时间问题。这里是一般流程:套接字关闭时间
- 客户端打开插座,问题HTTP GET到服务器
- 服务器接受,开始新的线程,与HTTP报头和200 OK响应。
- 服务器将(二进制)文件写入套接字。
- 客户端从套接字读取数据并保存到文件。
- 服务器线程后写的所有数据,它关闭套接字,并终止
这比之前的果冻豆更新过去的几个月中运作良好。自更新以来,二进制传输大约70%的时间成功。当'serverSocket.getInputStream()。read'返回一个-1指示已达到流结束时,剩下的30%将失败 。没有数据被读取,未引发错误异常,logcat中没有任何异常。
当我在步骤#5中更改服务器行为时,会出现计时问题的可能性。线程在写完观察到的问题后关闭了套接字。如果我关闭套接字,写完后终止线程,并让操作系统最终关闭套接字,然后它似乎一直工作。
我使用tcpdump和WireShark来查看成功和失败情况下的数据包。在失败的情况下,套接字在几毫秒内关闭,而在成功的情况下,套接字关闭的时间为四分之一秒或更多秒。这是因为我们在套接字关闭时造成的延迟增加了我们成功的机会。
如果任何人有任何建议与我们可能会导致此问题或建议如何缩小问题,请随时作出回应。如果需要,我可以添加代码示例。
请参阅我编辑的答案。 – Luis