通过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();是异步的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket协议是一种在单个TCP连接上进行全双工通信的协议。在WebSocket协议之前,浏览器与服务器之间的通信通常都是基于HTTP请求和响应的,也就是说,客户端向服务器发送请求,服务器返回响应,然后连接就被断开了。这种方式不够实时、效率也不高。 WebSocket协议通过在HTTP协议升级时使用"Upgrade"头来实现握手。握手成功后,连接就从HTTP协议升级到了WebSocket协议,从而在单个TCP连接上实现了全双工通信。 在Java中,可以使用Java API for WebSocket(JSR 356)来实现WebSocket协议。下面是基于Java实现WebSocket协议的步骤: 1. 创建自己的Endpoint类,继承javax.websocket.Endpoint类,实现onOpen、onMessage、onError和onClose方法。 2. 在onOpen方法中,创建Session对象,将它加入到某个集合中,以便在之后向客户端发送消息时使用。 3. 在onMessage方法中,处理客户端发送的消息,并向所有客户端发送消息。 4. 在onError方法中,处理异常。 5. 在onClose方法中,将Session从集合中移除。 6. 创建ServerEndpointConfig对象,并将Endpoint类和URI绑定在一起。 7. 创建WebSocket服务器,将ServerEndpointConfig对象传递给它。 8. 启动WebSocket服务器,等待客户端连接。 9. 客户端连接成功后,服务器会自动调用Endpoint的onOpen方法,表示连接已建立。 10. 客户端发送消息时,服务器会自动调用Endpoint的onMessage方法,处理消息。 11. 客户端关闭连接时,服务器会自动调用Endpoint的onClose方法,清除Session对象。 12. 服务器发生异常时,会自动调用Endpoint的onError方法,处理异常。 以上是基于Java实现WebSocket协议的大致步骤。需要注意的是,WebSocket协议中的数据是以帧的形式进行传输的,而不是HTTP协议中的请求和响应。因此,在编写WebSocket应用程序时,需要特别注意帧的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值