Android 4.4 socketio无法连接到https链接

时间:2014-07-08 19:05:51

标签: socket.io android-4.4-kitkat

我知道这是一个古老的问题,但我真的尝试了在线的所有方法,但没有一个适合我。我真的不知道该怎么做。

我正在尝试通过socketIO将我的Android 4.4连接到node.js.我正在使用gottox的客户端:https://github.com/Gottox我的套接字地址是https链接。所以我读了很多关于这个api和https连接不兼容的文章。

所以我改变了websocketTransport类,如下所示:

 public WebsocketTransport(URI uri, IOConnection connection) {
        super(uri);
        this.connection = connection;
        SSLContext context = null;
        try {
            context = SSLContext.getInstance("TLS", "HarmonyJSSE");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } 
        try {
            context.init(null, null, null);
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        if("wss".equals(uri.getScheme()) && context != null) {
            this.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(context));
        }
    }

我连接socketIO的代码是:

// connecting node server
            Log.v("connect to node server", "");
            SocketIO socket = new SocketIO();
            SocketIO.setDefaultSSLSocketFactory(SSLContext.getDefault());
            socket.addHeader("Cookie", "PHPSESSID=" + sessID);
            socket.connect("https://live.xxxxxxxx.com:8080/",new IOCallback() {

                @Override
                public void on(String arg0, IOAcknowledge arg1,
                        Object... arg2) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onConnect() {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onDisconnect() {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onError(SocketIOException arg0) {
                    // TODO Auto-generated method stub
                    arg0.printStackTrace();
                }

                @Override
                public void onMessage(String arg0, IOAcknowledge arg1) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onMessage(JSONObject arg0, IOAcknowledge arg1) {
                    // TODO Auto-generated method stub

                }

            });

对于我的节点服务器,我需要在标头中传递一个phpsessid,所以我添加了如上所述的标头。但每次我仍然有沉默的错误。它只是没有用。

这是我的日志:

io.socket.SocketIOException: Error while handshaking
at io.socket.IOConnection.handshake(IOConnection.java:335)
at io.socket.IOConnection.access$7(IOConnection.java:294)
at io.socket.IOConnection$ConnectThread.run(IOConnection.java:201)
Caused by: java.net.SocketTimeoutException: Read timed out
at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:689)
at java.io.InputStream.read(InputStream.java:162)
at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
at com.android.okhttp.internal.Util.readAsciiLine(Util.java:316)
at com.android.okhttp.internal.http.RawHeaders.fromBytes(RawHeaders.java:308)
at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:135)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:644)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:347)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
at io.socket.IOConnection.handshake(IOConnection.java:320)
... 2 more
I/io.socket(9077): Cleanup

我不知道发生了什么,但我认为问题是android仍在使用它自己的垃圾ssl工厂。所以谁知道如何解决这个问题?我在线阅读android 4.4 r使用不同的https标准。这是问题吗?

0 个答案:

没有答案