首先是导入的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\"}");
}
}
}*/
}