2016-03-22 1 views
3

Je suis en train de se connecter avec une connexion sécurisée websocket WSS: // dans Android en utilisant l'API org.java_websocket.client.WebSocketClient, mais incapable de se connecter avec https. Cependant, cela fonctionne bien avec ws: // .. Voici mon code.Impossible de se connecter websocket avec WSS dans Android

private void connect(String websocketEndPointUrl) throws Exception { 
    URI uri; 
    try { 

     websocketEndPointUrl="wss://echo.websocket.org:443"; 
     Log.i(TAG, " WSURL: " + websocketEndPointUrl); 

     uri = new URI(websocketEndPointUrl); 
    } catch (URISyntaxException e) { 
     Log.e(TAG, e.getMessage()); 
     return; 
    } 

    mWebSocketClient = new WebSocketClient(uri,new Draft_17()) { 
     @Override 
     public void onOpen(ServerHandshake serverHandshake) { 
      Log.i("Websocket", "Opened"); 
     } 

     @Override 
     public void onMessage(String s) { 
      //final String message =s; 

     } 

     @Override 
     public void onClose(int i, String s, boolean b) { 
      Log.i("Websocket", "Closed " + s); 
     } 

     @Override 
     public void onError(Exception e) { 
      Log.i("Websocket", "Error " + e.getMessage()); 
     } 
    }; 
    mWebSocketClient.connect(); 
} 

J'utilise url websocket test en ligne: ws: //echo.websocket.org (port 80) // travailler avec cette WSS: //echo.websocket.org (port 443) Comme Selon mon observation, il n'est pas nécessaire d'avoir un certificat dans mon code. Quelqu'un peut-il me suggérer ce qui est une raison et comment je peux résoudre ce problème.

Répondre

4

Trouver une solution. Je ne sais pas pourquoi cela ne fait pas partie de la documentation. Vous avez juste besoin de mettre setWebSocketFactory après l'initialisation de WebSocketClient et avant la méthode .connect()

mWebSocketClient = new WebSocketClient(uri,new Draft_17()) 
{ 
    @Override 
    public void onOpen(ServerHandshake serverHandshake) { 
     Log.i("Websocket", "Opened"); 
    } 

    @Override 
    public void onMessage(String s) { 
     //final String message =s; 

    } 

    @Override 
    public void onClose(int i, String s, boolean b) { 
     Log.i("Websocket", "Closed " + s); 
    } 

    @Override 
    public void onError(Exception e) { 
     Log.i("Websocket", "Error " + e.getMessage()); 
    } 
}; 

if (websocketEndPointUrl.indexOf("wss") == 0) 
{ 
    try { 
     SSLContext sslContext = SSLContext.getDefault(); 
     mWebSocketClient.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(sslContext)); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
} 

mWebSocketClient.connect(); 
+0

Beaucoup Merci pour cette réponse!) Cela fonctionne parfaitement! Ce –

+0

est fou. J'ai cherché l'Internet entier pour trouver cette astuce. Merci quand même. – Azade