1

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

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

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

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

谢谢你。

4

2 回答 2

2

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

于 2011-05-18T20:48:01.020 回答
0

您可能需要一个允许恢复中断数据传输的解决方案。查看如何恢复中断的下载 - 第 2 部分https://stackoverflow.com/search?q=[android]+resume+download示例。

另外,我强烈推荐观看Virgil Dobjanschi 在 Google I/O 2010 上关于 Android REST 客户端应用程序的演示文稿,其中他描述了设计一个用于处理此类数据和网络通信的应用程序。他是 Android 官方 Twitter 应用程序的作者。

于 2011-05-17T00:10:37.693 回答