【问题标题】:https://websocket not connect androidhttps://websocket 不连接安卓
【发布时间】:2016-09-27 07:39:56
【问题描述】:

我的连接套接字http://(with port) url 已完成并且工作正常,但我的连接https://(without port) 在Java-WebSocket 中不工作。

我使用 gradle 依赖 'org.java-websocket:Java-WebSocket:1.3.0'

WebSocketClient   mWebSocketClient = new WebSocketClient(uri) {
    @Override
    public void onOpen(ServerHandshake serverHandshake) {
        Log.e(TAG, "Websocket: " + "Opened");
        mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL);
    }

    @Override
    public void connect() {
        super.connect();
        //Log.e(TAG, "Websocket: " + "connect");
        SharedPreference.storeValue(mContext, SharedPreference.WEB_SOCKET_STATUS, SharedPreference.WEB_SOCKET_CONNECT);
    }
}

【问题讨论】:

  • 可能你的 SSL 证书没有为你的 https url 签名。
  • 简单来说,WebSocket库的实现有很多关于SSL的open issues。它的 SSL 实现可能在某些条件下有效,但您不应期望它总是有效。

标签: java android websocket


【解决方案1】:

我找到了解决方案!)如果你想使用 wss:// 你应该设置 setWebSocketFactory.. 就像这样:

public void connect() {

    final String url = "wss://echo.websocket.org";
    URI uri=null;
    try{
        uri = new URI(url);
    }
    catch (URISyntaxException e) 
    {
        Log.e(TAG, e.getMessage());
        return;
    }
    mWebSocketClient = new WebSocketClient(uri) {
        @Override
        public void onOpen(ServerHandshake handshakedata) {
            Log.e(TAG,"Connected!");
        }

        @Override
        public void onMessage(String message) {
            Log.e(TAG,"Message: "+message);

        }

        @Override
        public void onClose(int code, String reason, boolean remote) {
            Log.e(TAG,"Disconnected!");

        }

        @Override
        public void onError(Exception ex) {
            Log.e(TAG,"Error: "+ex.getMessage());

        }
    };

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

    mWebSocketClient.connect();
}

【讨论】:

  • 文件应该如何看起来像“network-security-config”文件并经过认证?需要建立连接
  • 不需要。我在没有任何“network-security-config”文件的情况下使用它。
【解决方案2】:

检查您的清单:

<uses-permission android:name="android.permission.INTERNET" >
 </uses-permission>

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >  
</uses-permission

请发布日志猫!

【讨论】:

  • 我已经添加了这两个权限
  • log cat :unkonow scheme https
  • 检查我的答案@Priyanka
  • 你的答案在哪里...请你提供解决方案的链接
【解决方案3】:

Websocket 有自己的协议ws://wss://(类似于http://https://),尽量使用这些协议。

【讨论】:

  • 我也尝试过这种方法,但我得到异常 malformedurlexception unknown protocol wss
  • 你的 websocket 服务器正在运行吗?
  • websocket.org/echo.html 此链接用于在线工作 https 到 wss 但如何集成到我的项目 url 中。我也尝试在我的项目中将 https 替换为 wss 但 url 不起作用并抛出异常 malformedurlexception 未知协议 wss
  • 尝试使用这个网址 wss://echo.websocket.org
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2011-05-13
  • 2012-05-26
  • 2011-05-09
相关资源
最近更新 更多