无法从客户端的Android连接Socket.io

问题描述:

什么是我的目标:无法从客户端的Android连接Socket.io

我想连接到与socket.io配置上与Android的一个连接参数命名空间的插座。例如,我想通过参数“token”和值“1234567890abc”连接到https://www.socket.com/messages/

我所知道的,到目前为止:

插槽中完全工作在Web客户端和IOS客户端上。 IOS客户端使用以下代码:

self.socketClient = SocketIOClient(socketURL: NSURL(string: APIManager.sharedManager.baseURL)!, options: [.Log(true), .Path(chat), .ConnectParams(["token":token])]) 
self.turnOnAllInitialListeners() 
self.socket.connect() 

没什么特别的,你可以看到。这是价值观:

[0] : log 
    - Log : false 
▿ [1] : path 
    - Path : "/server-x/" 
▿ [2] : secure 
    - Secure : true 
▿ [3] : connectParams 
    ▿ ConnectParams : 1 elements 
    ▿ [0] : 2 elements 
       - .0 : "token" 
       - .1 : bXByAFX7vYMERLyOBIgbP50ufPMOPKv 

这种连接succesfull,我一直在试图用这种方法来实现的Android一样的:

String url = "https://demo.test.test.nl"; 
    IO.Options opts = new IO.Options(); 
    opts.query = "token=bXByAFX7vYMERLyOBIgbP50ufPMOPKv"; 
// Tried on and off 
//  opts.path = "/server-x"; 
    try { 
     opts.sslContext = SSLContext.getDefault(); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    try { 
     Manager manager = new Manager(new URI(url), opts); 
     // Tried on and off 
     mSocket = manager.socket("/server-x"); 
    } catch (URISyntaxException e) { 
     Log.e(TAG, "Could not connect to socket server"); 
    } 
    setConnectionListeners(); 
    setChatListeners(); 
    // Connected always returns into false. 
    mSocket.connect(); 

没有什么不对的命名空间,路径或令牌。也尝试过没有SSL部分和有和没有单独的经理。代码也不会以其中一种捕获结束。有什么可能出错?所有的帮助表示赞赏。谢谢阅读。

好的问题出现在hostname/ssl证书中。打开日志记录后,我发现问题是传输错误。我发现了最令人讨厌的修复方式,它现在修复了它,并且不让我怀疑我的套接字代码。

private SSLContext temporarySslSolution() { 
    SSLContext sc = null; 
    try { 
     sc = SSLContext.getInstance("TLS"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    try { 
     sc.init(null, trustAllCerts, new SecureRandom()); 
    } catch (KeyManagementException e) { 
     e.printStackTrace(); 
    } 

    HttpsURLConnection.setDefaultHostnameVerifier(new RelaxedHostNameVerifier()); 
    return sc; 

} 

public static class RelaxedHostNameVerifier implements HostnameVerifier { 
    public boolean verify(String hostname, SSLSession session) { 
     return true; 
    } 
} 

public TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
    public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
     return new java.security.cert.X509Certificate[] {}; 
    } 
    public void checkClientTrusted(X509Certificate[] chain, 
            String authType) throws CertificateException { 
    } 

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