java-websocket实现客户端,即不用浏览器

最近在做一个javaweb项目,要求线上线下在一定条件下进行数据交互。

线下找线上好办,但是线上找线下就需要websocket,但由于只是数据交互并不涉及浏览器,故websocket客户端要在后台处理。网上有很多可以参考的例子,但最多的是用java-websocket.jar来处理。这里我引用的是Java-WebSocket-1.4.0.jar。

下面是websocket客户端代码


import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;

import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.enums.ReadyState;
import org.java_websocket.handshake.ServerHandshake;

public class Client {
	public static String ws = "此处为服务端websocket链接";
	public static WebSocketClient client;

	//建立连接
	public static void clientconnectInit(){
		try {
			client = new WebSocketClient(new URI(ws),new Draft_6455()) {
		        @Override
		        public void onOpen(ServerHandshake arg0) {
		            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) {
		            System.out.println("链接已关闭");
		        }
		        @Override
		        public void onMessage(ByteBuffer bytes) {
		            try {
		                System.out.println(new String(bytes.array(),"utf-8"));
		            } catch (UnsupportedEncodingException e) {
	   	             e.printStackTrace();
		            }
		        }
		    };
		    client.connect();//连接
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}
	}
	 
	/**
	 * 定时发送消息
	 */
	public void clientsend(){
	    //判断是否连接
	    while(!client.getReadyState().equals(ReadyState.OPEN)){
	        System.out.println("还没有打开");
	    }
	    client.send("hello world!!");
	}
	
	/**
	 * 自定义发送消息
	 */
	public static void clientSendMessage(){
//	    client.send("");
	}

}

以上代码在网上很多地方都可以搜得到,但有两点要注意,可能因为版本问题会有不一样。

第一个是new Draft_6455(),这个是根据自己的java-websocket.jar包里来调整,位置如图所示

java-websocket实现客户端,即不用浏览器_第1张图片

第二个是常量ReadyState.OPEN,网上大部分可能因为版本问题都是错误的。在判断是否连接成功时,常量用ReadyState.OPEN,测试是好用的。

本篇文章重点写客户端,因为网上有很多由于版本过旧等原因导致的错误问题,所以特写此篇记录一下,如有不对,欢迎指教。

你可能感兴趣的:(java,websocket)