Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty WebsocketClient未与android上的SSL连接_Java_Android_Ssl_Websocket_Jetty - Fatal编程技术网

Java Jetty WebsocketClient未与android上的SSL连接

Java Jetty WebsocketClient未与android上的SSL连接,java,android,ssl,websocket,jetty,Java,Android,Ssl,Websocket,Jetty,我有个问题,非常感谢您的帮助。我的测试设备是华硕Nexus7安卓5.1。我想使用Jetty Websockets连接到Web服务器。url正在使用wss,我已在manifest.xml文件中编辑了internet权限。代码如下: import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.WebSocketAdapter; import org.eclipse.jetty.util.

我有个问题,非常感谢您的帮助。我的测试设备是华硕Nexus7安卓5.1。我想使用Jetty Websockets连接到Web服务器。url正在使用wss,我已在manifest.xml文件中编辑了internet权限。代码如下:

import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.WebSocketAdapter;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;

/**
 * Created by Christian on 10.07.2015.
 */
public class Socket extends WebSocketAdapter {
    private static final Logger LOG = Log.getLogger(Socket.class);

    @Override
    public void onWebSocketConnect(Session session) {
        super.onWebSocketConnect(session);
        LOG.info("onConnect({})", session);
    }

    @Override
    public void onWebSocketText(String message) {
        super.onWebSocketText(message);
        LOG.info("onMessage() - {}", message);
    }

    @Override
    public void onWebSocketClose(int statusCode, String reason) {
        super.onWebSocketClose(statusCode, reason);
        LOG.info("onClose({}, {})", statusCode, reason);

    }

    @Override
    public void onWebSocketError(Throwable cause) {
        super.onWebSocketError(cause);
        LOG.warn(cause);
    }
}
这是websocket类。我正在android应用程序的主活动中启动websocket客户端:

URI uri = URI.create("wss://localhost:8600");
        SslContextFactory ssl = new SslContextFactory();
        ssl.setTrustAll(true);
        WebSocketClient client = new WebSocketClient(ssl);

        try {
            client.start();
            Socket socket = new Socket();
            ClientUpgradeRequest request = new ClientUpgradeRequest();
            Future<Session> fut = client.connect(socket, uri);
        } catch (Throwable t) {

            LOG.warn(t);
        }

这里也有同样的问题。问题似乎在于在Android中重新实现SSLPareters,您可以在Android.jar中找到它。这个实现甚至有一个名为“endpointIdentificationAlgorithm”的字段,但是没有使用,所以我想它将在将来实现

我通过重写“customize”方法做了一个变通,该方法调用缺少的setEndpointIdentificationAlgorithm并删除了该行,其余是原始代码:

   this.client = new WebSocketClient(new SslContextFactory(true){
        @Override
        public void customize(SSLEngine sslEngine) {
            SSLParameters sslParams = sslEngine.getSSLParameters();
            //sslParams.setEndpointIdentificationAlgorithm(_endpointIdentificationAlgorithm);
            sslEngine.setSSLParameters(sslParams);

            if (getWantClientAuth())
                sslEngine.setWantClientAuth(getWantClientAuth());
            if (getNeedClientAuth())
                sslEngine.setNeedClientAuth(getNeedClientAuth());

            sslEngine.setEnabledCipherSuites(selectCipherSuites(
                    sslEngine.getEnabledCipherSuites(),
                    sslEngine.getSupportedCipherSuites()));

            sslEngine.setEnabledProtocols(selectProtocols(sslEngine.getEnabledProtocols(),sslEngine.getSupportedProtocols()));
        }
    });

嘿,我也有同样的问题。想知道这个变通方法到底是否有效吗?这个变通方法对我来说很有效,但由于我有其他问题,我现在使用com.neovisioniers.ws,它对我来说很好,没有额外的黑客攻击
   this.client = new WebSocketClient(new SslContextFactory(true){
        @Override
        public void customize(SSLEngine sslEngine) {
            SSLParameters sslParams = sslEngine.getSSLParameters();
            //sslParams.setEndpointIdentificationAlgorithm(_endpointIdentificationAlgorithm);
            sslEngine.setSSLParameters(sslParams);

            if (getWantClientAuth())
                sslEngine.setWantClientAuth(getWantClientAuth());
            if (getNeedClientAuth())
                sslEngine.setNeedClientAuth(getNeedClientAuth());

            sslEngine.setEnabledCipherSuites(selectCipherSuites(
                    sslEngine.getEnabledCipherSuites(),
                    sslEngine.getSupportedCipherSuites()));

            sslEngine.setEnabledProtocols(selectProtocols(sslEngine.getEnabledProtocols(),sslEngine.getSupportedProtocols()));
        }
    });