通过java发送websocket协议

来源:互联网 发布:极有家 知乎 编辑:程序博客网 时间:2024/06/06 12:30

前段时间完成公司某个软件的自动化发现协议是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();是异步的