首页 > 解决方案 > Android:socket.io io.socket.engineio.client.EngineIOException:XHR 轮询错误

问题描述

有时我会收到此错误:

io.socket.engineio.client.EngineIOException:xhr 轮询错误

我连接到套接字的代码:

try {
    HostnameVerifier myHostnameVerifier = new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };
    TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }};

    SSLContext mySSLContext = null;
    try {
        mySSLContext = SSLContext.getInstance("TLS");
        try {
            mySSLContext.init(null, trustAllCerts, null);
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    OkHttpClient okHttpClient = new OkHttpClient.Builder().hostnameVerifier(myHostnameVerifier).sslSocketFactory(mySSLContext.getSocketFactory()).build();


    IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
    IO.setDefaultOkHttpCallFactory(okHttpClient);

    IO.Options opts = new IO.Options();
    opts.callFactory = okHttpClient;
    opts.webSocketFactory = okHttpClient;

    G.socket = IO.socket(G.SOCKET_ADDRESS, opts);
    G.socket.connect();
} catch (URISyntaxException e) {
    Log.i("errorCheck", "E: "+e);
    e.printStackTrace();
}

但有时它工作得很好。在其他时候,它不会。
我使用HTTPS,但它不适用于 443 端口。
我从用户那里获得所有权限,有时socket.io工作正常。

我如何修复它以使其始终正常工作?

标签: androidsocket.io

解决方案


最后,我将传输从 更改pollingwebsocket并修复了我的问题(客户端和服务器端)

安卓 :

IO.Options opts = new IO.Options();
opts.transports = new String[] { WebSocket.NAME };

socket = IO.socket(SOCKET_ADDRESS, opts);
socket.connect();

服务器 :

io.set('transports', ['websocket']);

推荐阅读