我的应用程序需要联系它正在同一个装置,通过http://127.0.0.1/...
(本地主机URL)。
出于某种原因,在时间(也许正是50%)的50%左右,当我到达使用JSON内容的网站上有,我得到异常:
java.net.SocketException异常:recvfrom的失败:ECONNRESET(由对等连接复位)
对于其他的50%,我得到非常好的效果。 我一直试图做的民意调查(和投票之间甚至大型延迟),但我不断收到同样奇怪的结果。
我在网上搜索,并在这里,以及它为什么会发生,我不知道。 是否同行意味着客户端造成的吗? 它为什么会发生,我应该怎么处理呢?
有些网站说,这是常见的事,但我没发现什么是在这种情况下,做的最好的事情。
好了,得到的答案是,它是服务器的故障 - 它不得不关闭,每个请求之后的连接。
这可能是Android的保持连接池,并使用旧的或类似的东西。
不管怎样,现在它的工作原理。
编辑:根据的API HttpURLConnection
,这可以在客户端上也得到解决:
通过此类返回的输入和输出流不被缓冲。 大多数用户请与包装或BufferedInputStream为的的BufferedOutputStream返回流。 呼叫方只做批量读取或写入操作可以省略缓冲。 当传输大量数据或从一台服务器,使用流来限制多少数据在内存中一次。 除非你需要整个身体是在存储器一次,处理它作为一个流(而不是存储完整体作为一个单一的字节数组或字符串)。
为了减少等待时间,这类可能重复用于多个请求/响应对的相同的底层插槽。 其结果是,HTTP连接可能会打开更长时间保持超过必要的。 呼叫断开()可以在插座返回连接套接字池。 这种行为可以通过发出任何HTTP请求之前设置http.keepAlive系统属性设置为false被禁用。 该http.maxConnections属性可以用来控制如何为每个服务器很多的空闲连接将举行。
:来自developer.android.com/reference/java/net/HttpURLConnection.html
尝试连接之前设置该属性为您HttpURLConnection的 :
conn.setRequestProperty("connection", "close");
这将禁用“ 保持活跃 ”属性,它默认是开启的。
这是一个古老的线程我知道。 但是,这可能会帮助别人。
在我的情况下,这个错误是由.NET WCF(SOAP)服务引起的。 一位在返回结果的对象必须使用get {}财产,但没有集合{}属性数据成员。
对于发生系列化每个数据成员应该都得到{}设置{}可用。 我实现了一个空集{}(空,由于我的业务规则),并解决了问题。
我之情况是不好的特定服务器实现,但也许它会帮助别人节省时间当故障排除。
我有很多这样的Connection reset by peer
,当我访问某些网页或下载文件(从我的应用程序或Android浏览器)。
原来,这是我的3G运营商是阻断的连接(例如,下载的.exe
文件被禁止)。
你有没有在WiFi同样的问题?
在我的情况的问题已经通过清洁这是由运营商从生产的APN代理服务器地址和端口解决。 因为我已经测试,使用远程服务器,而不是域名的IP地址,也可以解决问题。