通过java发送websocket协议

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

你可能感兴趣的:(java)