WebSocket工具类

        最近的项目在整长连接WebSocket,之前也写过一个感觉没有这个全面。提供个工具类WebSocketHelperJava-WebSocket-1.3.9.jar包以及一个HttpURLConnectionUtil

1、WebSocketHelper

import android.util.Log;import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;import java.net.URI;
import java.util.Date;
import java.util.concurrent.TimeUnit;/*** author : jsxin* e-mail : jsxin0816@163.com* time   : 2023/07/03* desc   : WebSocketHelper工具类*/
public class WebSocketHelper {public static final String TAG = WebSocketHelper.class.getSimpleName();private RobotWebSocket ws_robot;private boolean isRunning;private boolean isInterrupt;public static boolean isOpenOk = false;private WebSocketHelper() {this.isRunning = false;this.isInterrupt = false;}public static WebSocketHelper getInstance() {return SingletonHolder.instance;}public boolean isRunning() {return this.isRunning;}public void ConnectService(final String serive_ip, final String pad_name, final WebSokcetCallback cb) {if (!this.isRunning) {this.isInterrupt = false;Runnable runnable = new Runnable() {public void run() {while(!WebSocketHelper.this.isInterrupt) {WebSocketHelper.this.isRunning = true;if (WebSocketHelper.isOpenOk) {try {Thread.sleep(2000L);} catch (Exception var2) {var2.printStackTrace();}} else {try {String url = "ws://" + serive_ip + "/webSocket/" + 1;System.out.print(url);Log.i(WebSocketHelper.TAG, url);WebSocketHelper.this.ws_robot = WebSocketHelper.this.new RobotWebSocket(new URI(url), new Draft_6455(), cb);WebSocketHelper.this.ws_robot.connectBlocking(10L, TimeUnit.SECONDS);} catch (Exception var4) {Log.e(WebSocketHelper.TAG, var4.getMessage());}try {Thread.sleep(2000L);} catch (Exception var3) {var3.printStackTrace();}}}WebSocketHelper.this.isRunning = false;Log.i(WebSocketHelper.TAG, "robot websocket run over");}};Thread thread = new Thread(runnable);thread.start();}}public int sendMsg(String message) {Log.d(TAG, "message==" + message);synchronized(this.ws_robot) {try {if (this.ws_robot != null) {this.ws_robot.send(message);}} catch (Exception var5) {var5.printStackTrace();isOpenOk = false;return 1;}return 0;}}public void destroy() {try {this.isInterrupt = true;if (this.ws_robot != null) {this.ws_robot.closeBlocking();}} catch (Exception var2) {var2.printStackTrace();}}private class RobotWebSocket extends WebSocketClient {private WebSokcetCallback cb_;RobotWebSocket(URI serverUri, Draft protocolDraft, WebSokcetCallback cb) {super(serverUri);this.cb_ = cb;}public void onOpen(ServerHandshake handshakedata) {Log.i(WebSocketHelper.TAG, "onOpen");WebSocketHelper.isOpenOk = true;if (this.cb_ != null) {this.cb_.onConnect();}}public void onMessage(String message) {Log.d(WebSocketHelper.TAG, "receive: " + message);if (this.cb_ != null) {this.cb_.onMessageData(message);}}public void onClose(int code, String reason, boolean remote) {Log.i(WebSocketHelper.TAG, "Connection close by " + (remote ? "remote peer" : "us") + " at " + new Date(System.currentTimeMillis()));WebSocketHelper.isOpenOk = false;if (this.cb_ != null) {this.cb_.onDisonnect();}}public void onError(Exception ex) {Log.e(WebSocketHelper.TAG, "onError" + ex.getMessage());WebSocketHelper.isOpenOk = false;if (this.cb_ != null) {this.cb_.onDisonnect();}}}public interface WebSokcetCallback {void onConnect();void onDisonnect();void onMessageData(String var1);}private static class SingletonHolder {private static final WebSocketHelper instance = new WebSocketHelper();private SingletonHolder() {}}
}

2、HttpURLConnectionUtil

import android.support.annotation.Nullable;
import android.util.Log;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;/*** author : jsxin* e-mail : jsxin0816@163.com* time   : 2023/07/24* desc   :*/
public class HttpURLConnectionUtil {public static final String TAG = HttpURLConnectionUtil.class.getSimpleName();public HttpURLConnectionUtil() {}public static String doGet(String httpUrl) {HttpURLConnection connection = null;InputStream is = null;BufferedReader br = null;StringBuffer result = new StringBuffer();try {URL url = new URL(httpUrl);connection = (HttpURLConnection)url.openConnection();connection.setRequestMethod("GET");connection.setReadTimeout(15000);connection.connect();if (connection.getResponseCode() == 200) {is = connection.getInputStream();if (null != is) {br = new BufferedReader(new InputStreamReader(is, "UTF-8"));String temp = null;while(null != (temp = br.readLine())) {result.append(temp);}}}} catch (IOException var19) {var19.printStackTrace();} finally {if (null != br) {try {br.close();} catch (IOException var18) {var18.printStackTrace();}}if (null != is) {try {is.close();} catch (IOException var17) {var17.printStackTrace();}}connection.disconnect();}return result.toString();}public static String doPost(String httpUrl, @Nullable String param) {StringBuffer result = new StringBuffer();HttpURLConnection connection = null;OutputStream os = null;InputStream is = null;BufferedReader br = null;try {URL url = new URL(httpUrl);connection = (HttpURLConnection)url.openConnection();connection.setRequestMethod("POST");connection.setConnectTimeout(15000);connection.setReadTimeout(15000);connection.setUseCaches(false);connection.setDoOutput(true);connection.setDoInput(true);connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36)");if (null != param && !param.equals("")) {os = connection.getOutputStream();os.write(param.getBytes("UTF-8"));os.flush();}int httpstatus = connection.getResponseCode();Log.i(TAG, "http status :" + httpstatus);if (httpstatus == 200) {is = connection.getInputStream();if (null != is) {br = new BufferedReader(new InputStreamReader(is, "utf-8"));String temp = null;while(null != (temp = br.readLine())) {result.append(temp);result.append("\r\n");}}}} catch (MalformedURLException var30) {var30.printStackTrace();} catch (IOException var31) {var31.printStackTrace();} finally {if (br != null) {try {br.close();} catch (IOException var29) {var29.printStackTrace();}}if (os != null) {try {os.close();} catch (IOException var28) {var28.printStackTrace();}}if (is != null) {try {is.close();} catch (IOException var27) {var27.printStackTrace();}}connection.disconnect();}return result.toString();}
}

3、Java-WebSocket-1.3.9.jar包(上传的是个压缩包,直接解压就能用)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/8325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Two Days wpf 分享 分页组件

迟来的wpf分享。 目录 一、序言 二、前期准备 三、前端界面 四、后台代码部分 1、先定义些变量后面使用 2、先是按钮事件代码。 首页按钮 上一页按钮 下一页按钮 末尾按钮 画每页显示等数据 每页显示多少条 判断是否为数字的事件 分页数字的点击触发事件 跳转到…

HCIP——OSPF基础

OSPF基础 一、OSPF基础二、OSPF的区域划分三、OSPF的数据包hello包数据库描述包DBD包链路状态请求包LSR包链路状态更新包LSU包链路状态确认包LSAck包 四、OSPF的状态机五、OSPF的工作过程六、链路状态型的路由生成过程七、条件匹配五、OSPF数据包头部八、OSPF的接口网络类型 一…

链动2+1系统开发模式有没有风险?

现在的分销模式层出不穷,很多人都不知道分销与传销的区别,甚至认为最近很火的一个分销模式链动21也是个传销盘。那么,链动21模式究竟涉不涉传?有没有风险呢?下面就来具体说一下。 首先分销不是传销,分销是商…

Kafka生产者性能调优技巧

Kafka生产者性能调优技巧 一、Kafka生产者简介1.1 概述1.2 Kafka生产者性能的重要性1.2.1 批量发送消息1.2.2 指定分区1.2.3 使用压缩算法1.2.4 合理设置ACKs参数 二、Kafka生产者性能调优技巧2.1 硬件配置优化2.1.1 CPU、内存、磁盘等硬件参数调整注意事项2.1.2 如何通过负载均…

(css)列表点击前后样式

(css)列表点击前后样式 效果&#xff1a; html <ul v-show"rightOne" class"one-content"><liv-for"(item,index) in exampleList":key"index"click"searchHandle(item,index)"class"liClass":class&qu…

Java中的LRU缓存算法

Java中的LRU缓存算法 LRU&#xff08;Least Recently Used&#xff09;缓存算法是一种常见的缓存淘汰算法&#xff0c;用于在缓存空间不足时决定哪些数据需要被淘汰&#xff0c;以便为新的数据腾出空间。LRU算法的基本思想是&#xff1a;当缓存满时&#xff0c;淘汰最近最少使…

MySQL函数讲解(谓词、CASE)

目录 MySQL常见函数 字符串函数 进行字符串操作的函数 算术函数 进行数值计算的函数 日期函数 进行日期操作的函数 转换函数 进行数据类型和值转换的函数 流程函数 进行条件删选 聚合函数 进行数据聚合的函数 谓词 一般用于条件判断 什么是函数 函数指一段可以直接被…

第5集丨ES6 江湖 —— 函数扩展

目录 一、箭头函数1.1 基本用法1.2 与变量解构结合使用1.3 表达更加简洁1.4 rest 参数与箭头函数结合1.5 注意点1.6 this对象1.6.1 利于封装回调函数1.6.2 练习 1.7 arguments 、 super、 new.target1.8 call() 、 apply() 、 bind() 二、rest 参数2.1 rest 参数代替 arguments…

git常用命令总结

文章目录 1. 创建仓库和初始化2. 添加和提交更改3. 分支管理4. 查看状态和历史5. 撤销更改6. 远程仓库 当使用 Git 进行版本控制时&#xff0c;以下是一些常用的 Git 命令的详细总结&#xff1a; 1. 创建仓库和初始化 git init: 在当前目录创建一个新的 Git 仓库。执行后会在当…

【C++】-多态的语法细节详解

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

android 高版本sd卡目录读写权限

1、从安卓11不允许访问sd目录&#xff0c;官方说明如下&#xff1a; https://developer.android.com/about/versions/11/privacy/storage?hlzh-cn 2、使用MediaStore方法 一手遮天 Android - 存储: Android 11 通过 MediaStore 管理文件 - webabcd - 博客园 (cnblogs.com) …

GPT-3.5:ChatGPT的奇妙之处和革命性进步

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

苹果开发“Apple GPT”AI科技迎来新格局

根据彭博社的马克・古尔曼&#xff08;Mark Gurman&#xff09;报道&#xff0c;苹果内部正在开发“Apple GPT”人工智能项目&#xff0c;足以媲美 OpenAI 的 ChatGPT &#xff0c;预计明年推出。就在彭博社消息发出之后&#xff0c;苹果股价上涨了2.3%&#xff0c;市值顶峰时增…

Auspiciousness

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有一个含有2n张牌的牌堆&#xff0c;当手牌为空时&#xff0c; 从牌堆顶抽一张牌&#xff0c;然后猜牌堆顶的牌和手牌顶的牌的大小关系&#xff0c;并抽牌&#xff0c;如果猜对了继续循环&#xff0c;否则游戏直接结…

利用事件委托和冒泡 判断点击了哪个元素或该元素的子级元素

概述&#xff1a; 通过 event.composedPath() 拿到事件冒泡路径&#xff0c;再循环匹配 获取所需的dom <template><div click"handleClick"><div class"child child1"><button>Click Me</button><span>Click Me1<…

题目4 命令执行(保姆级教程)

url&#xff1a;http://192.168.154.253:84/ #打开http://XXX:81/&#xff0c;XXX为靶机的ip地址 审题 1、打开题目看到有一个提示&#xff0c;此题目需要通过利用命令执行漏洞执行Linux命令获取webshell&#xff0c;最后从根目录下key.php文件中获得flag 2、开始答题 第一步&…

Nginx在springboot中起到的作用

面试时这样回答&#xff1a; 在Spring Boot项目中使用Nginx可以有以下用途&#xff1a; 1. 反向代理&#xff1a;Nginx可以作为反向代理服务器&#xff0c;将外部请求转发到后端的Spring Boot应用&#xff0c;并可以实现负载均衡、高可用、缓存等功能&#xff0c;提高系统的性…

css设置八等分圆

现需要上图样式的布局&#xff0c;我通过两张向右方的图片&#xff0c;通过定位和旋转完成了布局。 问题&#xff1a; 由于是通过旋转获取到的样式&#xff0c;实际的盒子是一个长方形&#xff0c;当鼠标移入对应的箭头时选中的可能是其他盒子&#xff0c;如第一张设计稿可以看…

C++ make_shared pros and cons

高效内存分配 std::shared_ptr<Node> ptr(new Node);上面的代码存在两次内存分配 new Node为ptr分配控制块的内存用于存放引用计数等信息 如果使用std::make_shared只会存在一次内存分配&#xff0c;它会一次性申请足够大的空间用于存储Node和控制块 异常安全 void …

Ngrok 的绝佳替代品,内网穿透神器 Serveo

什么是 Serveo Serveo 是一个免费的内网穿透服务&#xff0c;Serveo 可以将本地计算机暴露在互联网上&#xff0c;官方声称其为 Ngrok 的绝佳替代品。 Serveo 其最大优点是使用现有的 SSH 客户端&#xff0c;无需安装任何客户端软件即可完成端口转发。 Serveo 工作原理很简单…