Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中通过异步套接字连接进行大数据传输的问题_Android_Sockets_Asynchronous_3g - Fatal编程技术网

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

Android中通过异步套接字连接进行大数据传输的问题,android,sockets,asynchronous,3g,Android,Sockets,Asynchronous,3g,我有一个Android应用程序,它通过异步套接字连接与服务器通信,以传输一些大的信息包(最多11兆)。为了适应这种交互,我在数据发送和接收的关键点上放置了小型睡眠。在WiFi上,连接工作正常。一次读取或写入信息的大小似乎不够,但我创建了一些函数,以保持从套接字读取信息,直到传输完成 正如我所说,所有这些都在WiFi上工作。然而,在3G或边缘网络上,传输失败,中途中断,通常出现错误。我已经进行了多次检查和睡眠,以确保信息有机会通过,但它无法通过 不幸的是,很难弄清楚问题的根源。我已经工作了几天,试

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

正如我所说,所有这些都在WiFi上工作。然而,在3G或边缘网络上,传输失败,中途中断,通常出现错误。我已经进行了多次检查和睡眠,以确保信息有机会通过,但它无法通过

不幸的是,很难弄清楚问题的根源。我已经工作了几天,试图尽可能优雅地解决这个问题,但没有任何效果

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


谢谢。

您可能需要一个允许恢复中断的数据传输的解决方案。以和为例


另外,我强烈推荐观看,他在其中描述了设计一款处理此类数据和网络通信的应用程序。他是Android官方推特应用程序的作者。

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

你能用一些简单的小代码重现这个问题吗另外,我也不会费心在代码中插入
sleep()
调用write()
将是一个阻塞操作,因此当内核TCP堆栈无法接受更多输入时,发送线程将处于休眠状态。只需快速循环,一次写入4096字节。(很好的小魔术数字。不要太大,也不要太小,也许你会很幸运,可以更快地访问页面对齐的数据。)我在这个项目的早期发现的一件事是,当发送数据时,在任何给定的时间都会发送最大数量的数据。如果我尝试在没有一点睡眠的情况下再写一篇文章,那么整个文章就会变得毫无价值。同样地,我实际上让3g每读3秒睡眠(这是一个非常长的时间),但是在做了一些其他的改变后,停止了工作。这就是为什么我想找到一个更好的方法。我将努力为您获取一些代码。我终于找到了答案:基本上,我假设我在3g上的read()足够大,可以容纳大量有意义的数据。谢谢你的4096它为我指明了正确的方向。基本上,它读取信息(XML数据),直到达到有意义的程度,然后继续前进。谢谢