2016-03-22 20 views
3

Ich versuche, mit sicheren Websocket-Verbindung wss: // in android mit org.java_websocket.client.WebSocketClient API, aber keine Verbindung mit https. Aber es funktioniert gut mit ws: // .. Hier ist mein Code.Konnte nicht verbinden websocket mit wss in 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(); 
} 

ich bin mit Online-Test websocket url: ws: //echo.websocket.org (Port 80) // mit diesem WSS arbeitet: //echo.websocket.org (Port 443) Wie Nach meiner Beobachtung ist kein Zertifikat in meinem Code erforderlich. Kann mir jemand vorschlagen was ein Grund ist und wie ich das beheben kann.

Antwort

4

Finden Sie eine Lösung. Ich weiß nicht, warum das nicht Teil der Dokumentation ist. Sie müssen nur setWebSocketFactory nach WebSocketClient Initialisierung gesetzt und vor der .connect() Methode

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

Vielen Dank für diese Antwort!) Dies funktioniert perfekt! –

+0

Das ist verrückt. Ich habe das ganze Internet durchsucht, um diesen Trick zu finden. Danke trotzdem. – Azade

Verwandte Themen