我有一个Android应用程序,它通过异步套接字连接与服务器通信,以传输大量信息包(最高11兆)。为了适应这种交互,我在数据发送和接收的关键点放置了小睡眠。在WiFi上连接有效。读取或写入信息的大小似乎不够,但我已经创建了一些函数来继续读取套接字,直到传输完成。
正如我所说,所有这些都适用于WiFi。然而,在3G或边缘网络上,传输失败,中途中断,并且通常是错误的。我已经进行了大量的检查和睡眠,以确保信息有机会通过,但是没有。
不幸的是,对于问题的根源很难更清楚。我已经工作了好几天试图尽可能优雅地解决这个问题但没有用。
TLDNR WiFi能够发送数据但移动网络失败。我需要知道为什么以及如何解决它。
谢谢。
答案 0 :(得分:2)
实际问题是每read()
收到的金额比我预期的要小得多。我的程序需要在程序知道如何使用它之前通过XML发送整个模式。它没有收到足够的字符串,所以会死。现在它检查/ schema标签是否在字符串中(通过if(!response.contains("/schema")
))并且在发现或超时之前不会停止读取。
答案 1 :(得分:0)
您可能需要一种能够恢复中断数据传输的解决方案。有关示例,请查看how to resume an interrupted download - part 2和https://stackoverflow.com/search?q=[android]+resume+download。
此外,我强烈建议观看Virgil Dobjanschi's Google I/O 2010 presentation on Android REST client applications,其中他描述了设计用于处理此类数据和网络通信的应用。他是Android官方Twitter应用程序的作者。