2016-03-22 19 views
3

org.java_websocket.client.WebSocketClient API kullanarak güvenli websocket bağlantısı wss: // ile bağlanmaya çalışıyorum, ancak https ile bağlanamıyor. Ancak ws: // ile çalışıyor. İşte benim kodum.Android ile wss ile websocket bağlanılamıyor

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

i online testi WebSocket url kullanıyorum: ws: //echo.websocket.org (bağlantı noktası 80) // o wss ile çalışan: //echo.websocket.org (bağlantı noktası 443) gibi Gözlemlerimde kodumda gerekli olan sertifikaya gerek yoktur. Herkes bana bir nedenin ne olduğunu ve bunu nasıl düzeltebileceğimi önerebilir.

cevap

4

Bir çözüm bul. Bunun neden belgelerin bir parçası olmadığını bilmiyorum. Sadece bu yanıt için

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

Çok teşekkür WebSocketClient başlatmasından sonra ve .connect() yönteminden önce setWebSocketFactory ayarlamanız gerekir!) Bu mükemmel çalışıyor! –

+0

Bu delilik. Bu numarayı bulmak için tüm interneti aradım. Yine de teşekkürler. – Azade

İlgili konular