2016-03-22 9 views
3

org.java_websocket.client.WebSocketClient APIを使用してAndroidで安全なWebSocket接続wss://に接続しようとしていますが、httpsに接続できません。しかしそれはws://でうまくいきます。ここに私のコードです。androidでwssとWebSocketを接続できません

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(); 
} 

私はオンラインテスト用WebSocketのURLを使用しています: WS://echo.websocket.org(ポート80)//その WSSでの作業://echo.websocket.org(ポート443) Asを私の見解によれば、私のコードには証明書が必要なくなります。誰かが私に何か理由を示唆することができ、どのように私はこれを修正することができます。

答えて

4

解決策を見つけます。なぜこれがドキュメンテーションの一部ではないのかわかりません。あなたはこの回答のため

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

多くのおかげWebSocketClientの初期化後と.connect()方法前setWebSocketFactoryを設定する必要があります!)これは完璧な作品! –

+0

これは狂っています。私はこのトリックを見つけるためにインターネット全体を検索しました。とにかくありがとう。 – Azade

関連する問題