在Android中通过异步套接字连接传输大量数据的问题

时间:2011-05-17 00:03:10

标签: android sockets asynchronous 3g

我有一个Android应用程序,它通过异步套接字连接与服务器通信,以传输大量信息包(最高11兆)。为了适应这种交互,我在数据发送和接收的关键点放置了小睡眠。在WiFi上连接有效。读取或写入信息的大小似乎不够,但我已经创建了一些函数来继续读取套接字,直到传输完成。

正如我所说,所有这些都适用于WiFi。然而,在3G或边缘网络上,传输失败,中途中断,并且通常是错误的。我已经进行了大量的检查和睡眠,以确保信息有机会通过,但是没有。

不幸的是,对于问题的根源很难更清楚。我已经工作了好几天试图尽可能优雅地解决这个问题但没有用。

TLDNR WiFi能够发送数据但移动网络失败。我需要知道为什么以及如何解决它。

谢谢。

2 个答案:

答案 0 :(得分:2)

实际问题是每read()收到的金额比我预期的要小得多。我的程序需要在程序知道如何使用它之前通过XML发送整个模式。它没有收到足够的字符串,所以会死。现在它检查/ schema标签是否在字符串中(通过if(!response.contains("/schema")))并且在发现或超时之前不会停止读取。

答案 1 :(得分:0)

您可能需要一种能够恢复中断数据传输的解决方案。有关示例,请查看how to resume an interrupted download - part 2https://stackoverflow.com/search?q=[android]+resume+download

此外,我强烈建议观看Virgil Dobjanschi's Google I/O 2010 presentation on Android REST client applications,其中他描述了设计用于处理此类数据和网络通信的应用。他是Android官方Twitter应用程序的作者。