前段时间完成公司某个软件的自动化发现协议是websocket
特在下面贴出通过java来模拟websocket的请求端
jar地址:http://download.csdn.net/download/zy841958835/10039797
package service.util;
import java.net.URI;
import java.nio.ByteBuffer;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.java_websocket.WebSocket.READYSTATE;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;
import org.json.JSONObject;
/**
* @author author cloud_pluie:
* @version CreateDate 2017年9月25日
*/
public class WebSocket {
public static WebSocketClient client;
public static void main(String[] args) throws Exception {
http();
URI uri = new URI("wss://xxxx/login?token="+token.replaceAll("\\s+", "%0A"));
client = new WebSocketClient(uri,new Draft_6455(),null,30000) {
@Override
public void onOpen(ServerHandshake arg0) {
try{
Thread.sleep(2000);
System.out.println("wait 2s");
}catch(Exception e){
}
System.out.println(arg0.getHttpStatus());
System.out.println("打开链接");
}
@Override
public void onMessage(String arg0) {
System.out.println("收到消息"+arg0);
}
@Override
public void onError(Exception arg0) {
arg0.printStackTrace();
System.out.println("发生错误已关闭");
}
@Override
public void onClose(int arg0, String arg1, boolean arg2) {
super.close();
System.out.println(arg1);
System.out.println("链接已关闭");
}
@Override
public void onMessage(ByteBuffer bytes) {
try {
System.out.println(new String(bytes.array(),"utf-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
};
System.out.println("connecting...");
client.connect();
try{
Thread.sleep(2000);
System.out.println("wait 2s");
}catch(Exception e){
}
while(!client.getReadyState().equals(READYSTATE.OPEN)){
System.out.println("还没有打开");
}
System.out.println("current status : "+client.getReadyState());
// send("hello world".getBytes("utf-8"));
// client.send("hello world");
}
public static void send(byte[] bytes){
client.send(bytes);
}
public static void http(){
/**gettoken*/
}
static CloseableHttpClient httpClient = null;
static String token;
}
两个地方需要注意
1.URL需要注意格式出现空格汉字特殊字符时需要转义
2.client.connect();是异步的