Java-3G中某些Android设备的HTTPS异常

这是我的问题:

我想使用自签名证书在服务器上发出HTTPS请求.在WLAN上与Galaxy S2(v4.0.3),Nexus S(4.0.4),Xperia Ray(4.0.3)和Galaxy Ace(2.3.6)配合使用时效果很好.

在3G中进行测试时,它仅适用于Galaxy Ace和Xperia Ray.在其他我得到的套接字已关闭:java.net.SocketException.

this page上,我找到了解决方案.我有一个请求属性Connection:关闭.但是没有此标头,我会收到另一个错误:握手超时.

这些设备在获得这些不同结果方面可能有何不同?

对于https请求,我使用javax.net.ssl包.我为请求使用客户端私钥.

编辑:我用其他SIM卡进行了测试,这很奇怪:使用一张SIM卡,它可以在Nexus S上运行,但不能在银河S上使用.使用第二张,对所有人都可以正常运行.我的结论是:某些运算符可能会捆绑特定的请求或数据传输.我不知道为什么,我会与他们联系以获取更多信息

编辑2:
解决方案在这里:
how to force my app NOT to use the 3g data proxy setting

解决方法:

根据您的编辑,此问题确实是由运算符代理设置引起的.

您的链接解决了我的问题,但是花了点时间弄清楚如何使用ProxySelector和* Proxy.NO_PROXY *,因此我想在这里发布解决方案以确保完整性.

请注意,我覆盖了应用程序中的所有URI尝试,如果您通过Facebook SDK之类的连接而不希望自己入侵,这将非常方便.

ProxySelector proxySelector = new ProxySelector() {

        @Override
        public List<Proxy> select(URI uri) {
            List<Proxy> proxies = new ArrayList<Proxy>();
            proxies.add(Proxy.NO_PROXY);
            return proxies;
        }

        @Override
        public void connectFailed(URI uri, SocketAddress address,
                IOException failure) {
            // TODO Auto-generated method stub

        }
    };
    ProxySelector.setDefault(proxySelector);
上一篇:Java标准库定义的常用异常


下一篇:java.net.SocketException:Quartz,MySQL和Tomcat的管道中断(Tomcat崩溃)