首先是导入的maven依赖,开始的时候用新版的1.4.0,如果只是websocket协议,ws协议完全没问题,直接就可以连接,但是当使用wss的时候,没找到相应的解决方案,总是在报错找不到DefaultSSLWebSocketClientFactory等类,然后发现了1.3.0可以实现的一种方案,当然1.4.0不能实现应该是我没找对方法,但是能用一种就发出来记录一下。现在使用1.3.0 。

		<dependency>
			<groupId>org.java-websocket</groupId>
			<artifactId>Java-WebSocket</artifactId>
			<version>1.3.0</version>
		</dependency>
import org.java_websocket.client.DefaultSSLWebSocketClientFactory;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;

import javax.net.ssl.*;
import java.net.URI;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Iterator;


public class MyWebSocketClient extends WebSocketClient {

    public static final String WEBSOCKET_SERVER_URL = "wss://www.chuai.com:8800";

    public MyWebSocketClient(URI serverUri) {
        super(serverUri);
    }

    @Override
    public void onOpen(ServerHandshake shake) {
        System.out.println("握手...");
        for (Iterator<String> it = shake.iterateHttpFields(); it.hasNext(); ) {
            String key = it.next();
            System.out.println(key + ":" + shake.getFieldValue(key));
        }
    }

    @Override
    public void onMessage(String paramString) {
        System.out.println("接收到消息:" + paramString);
    }

    @Override
    public void onClose(int code, String reason, boolean remote) {
        System.out.println("Disconnected");
    }

    @Override
    public void onError(Exception e) {
        System.out.println("异常" + e);

    }

    final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };

    /**
     * Trust every server - dont check for any certificate
     */
    private static void trustAllHosts(MyWebSocketClient appClient) {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[]{};
            }


            public void checkClientTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }


            public void checkServerTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }
        }};


        // Install the all-trusting trust manager
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            appClient.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(sc));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static MyWebSocketClient getChatClient()throws Exception {
        MyWebSocketClient chatclient = new MyWebSocketClient(new URI(WEBSOCKET_SERVER_URL));
        trustAllHosts(chatclient);
        chatclient.connectBlocking();
        return chatclient;
    }
    /*
    public static void main(String[] args) throws Exception {

        MyWebSocketClient chatclient = new MyWebSocketClient(new URI(WEBSOCKET_SERVER_URL));
        trustAllHosts(chatclient);
        chatclient.connectBlocking();

        chatclient.send("{\"type\":\"login\",\"name\":\"admin\",\"passwd\":\"111111\"}");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            String line = reader.readLine();
            if (line.equals("close")) {
                chatclient.close();
            } else {
                chatclient.send("{\"type\":\"friend_list\"}");
            }
        }

    }*/
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐