08-21 14:35:37.919: W/System.err(6085): java.net.SocketTimeoutException: failed to connect to /180.186.31.33 (port 8080) after 10000ms 08-21 14:35:37.919: W/System.err(6085): at libcore.io.IoBridge.connectErrno(IoBridge.java:159) 08-21 14:35:37.929: W/System.err(6085): at libcore.io.IoBridge.connect(IoBridge.java:112) 08-21 14:35:37.929: W/System.err(6085): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 08-21 14:35:37.929: W/System.err(6085): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
/** * 连接超时时间 */ public final static int CONNECT_TIMEOUT = 10000; /** * 读取超时时间 */ public final static int READ_TIMEOUT = 30000;ConnManagerParams.setMaxTotalConnections(httpParams, MAX_TOTAL_CONNECTIONS); // 设置获取连接的最大等待时间 HttpConnectionParams.setConnectionTimeout(httpParams, CONNECT_TIMEOUT); HttpConnectionParams.setSoTimeout(httpParams, READ_TIMEOUT);把这三个参数设置大写试试
08-21 14:35:37.919: W/System.err(6085): at libcore.io.IoBridge.connectErrno(IoBridge.java:159)
08-21 14:35:37.929: W/System.err(6085): at libcore.io.IoBridge.connect(IoBridge.java:112)
08-21 14:35:37.929: W/System.err(6085): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
08-21 14:35:37.929: W/System.err(6085): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
* 连接超时时间
*/
public final static int CONNECT_TIMEOUT = 10000;
/**
* 读取超时时间
*/
public final static int READ_TIMEOUT = 30000;ConnManagerParams.setMaxTotalConnections(httpParams,
MAX_TOTAL_CONNECTIONS);
// 设置获取连接的最大等待时间
HttpConnectionParams.setConnectionTimeout(httpParams,
CONNECT_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParams, READ_TIMEOUT);把这三个参数设置大写试试
MAX_TOTAL_CONNECTIONS); 这个不用设了,看错了
至今我仍然没有解决这个问题,应用在首次打开连接失败,那么必须隔一段时间再次连接才能成功,或者杀死应用进程,重新打开连接就好了。难道是httpclient缓存问题?
前提是你们用3G,2G,4G可以正常访问,确保程序没有问题,然后在测试
1.同一个路由,同一个光纤:安卓连接服务器非常不稳定,可能在某一时间就会连接上(在安卓手机下载终端工具,pin服务器路径有时成功有时失败),ios可以
2.不同路由器,同一个光纤:如1的情况相同
3.同一个路由器,不同光纤:安卓正常,ios正常
最后我推断可能是光纤的问题,时断时续的连接,ios与安卓分别是怎么做的,底层的东西我也不懂,所以只能想到这里
结果就是3,我们换了网线,一切正常
如果大家发现了具体的问题出在哪,麻烦通知我一下,
1.每次都新建httpclient
2.在请求得到http的错误码(非200的情况),需要调用request.abort();
3.超时或者其他请求异常时,catch里面调用httpclient.getConnectionManager().shutdown();// 释放连接请大家务必核对以上3点,如果没有问题,我也不知道有什么更好的办法了。
Android切换成移动网络(比如2G),就一切正常。
另外请问这个代码能解决之前提到的光纤的问题吗?
毕竟android上的一些大众应用如微信之类,是肯定不会受什么光纤影响的吧,终究还是我们的代码写得有问题,我以为。