WebSocket工具类
最近的项目在整长连接WebSocket,之前也写过一个感觉没有这个全面。提供个工具类WebSocketHelper和Java-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包(上传的是个压缩包,直接解压就能用)
相关文章:
WebSocket工具类
最近的项目在整长连接WebSocket,之前也写过一个感觉没有这个全面。提供个工具类WebSocketHelper和Java-WebSocket-1.3.9.jar包以及一个HttpURLConnectionUtil 1、WebSocketHelper import android.util.Log;import org.java_websocket.client.WebSocketClient; imp…...
Linux 的 crontab
Linux 的 crontab 是一个用于在特定时间运行命令或脚本的工具。每个用户都可以创建自己的 crontab 文件来安排定时任务。 以下是使用 Linux crontab 的基本步骤: 打开终端或命令行界面。 输入以下命令来编辑当前用户的 crontab 文件: crontab -e如果是…...

十二.Redis模拟集群搭建
配置环境 查看环境信息 127.0.0.1:6379> info replication #查看当前redis的信息 # Replication role:master #角色 master主机 connected_slaves:0 #从机数量为0 master_failover_state:no-failover master_replid:115f37a0ec195680ef754d6915738b0c0a05f450 master_replid…...

IDEA导入微服务项目后自动将微服务展示在service面板中
有时候,不会自动将微服务展示在service面板中。 添加service面板: service面板: 更新所有maven,就可以自动将微服务展示在service面板中。...

MySQL体系结构及执行过程
一、MySQL体系结构 1、网络连接层 客户端连接器(Client Cnnectors):提供支持与MySQL服务器建立连接。 建立连接命令:mysql -h -u -p -h指定MySQL服务的IP 若本地连接则不需要 每一个连接均会保存用户权限,中途修改权…...

21. MySQL基础知识
文章目录 一、索引B Tree 原理1. 数据结构2. 操作3. 与红黑树的比较 MySQL 索引1. BTree 索引2. 哈希索引3. 全文索引4. 空间数据索引 索引优化1. 独立的列2. 多列索引3. 索引列的顺序4. 前缀索引5. 覆盖索引 索引的优点索引的使用条件 二、查询性能优化使用 Explain 进行分析优…...

【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图
本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…...
2023“钉耙编程”中国大学生算法设计超级联赛(3)8-bit Zoom
2023“钉耙编程”中国大学生算法设计超级联赛(3)8-bit Zoom 题解 有一张尺寸为 n n n\times n nn的图片,你要将图片放大成大小为 n Z 100 n Z 100 \dfrac{nZ}{100}\times \dfrac{nZ}{100} 100nZ100nZ的图片。 当下列任何一个条件不成…...

【PWN · ret2text | 伪rand()】[HDCTF 2023]pwnner
伪随机数以及ctypes库的初步接触 目录 前言 一、题目 二、解题思路 三、exp 总结 前言 一道简单的ret2text,加上一些伪随机的知识,对于本蒟蒻萌新来说,比较新,值得记录。 一、题目 栈溢出保护、PIE保护都没有开。反汇编后…...

第五章:通过对抗擦除的目标区域挖掘:一种简单的语义分割方法
0.摘要 我们研究了一种逐步挖掘具有鉴别性的物体区域的原则方法,使用分类网络来解决弱监督语义分割问题。分类网络只对感兴趣对象中的小而稀疏的鉴别性区域有响应,这与分割任务的要求相背离,分割任务需要定位密集、内部和完整的区域以进行像素…...

自定义view - 玩转字体变色
自定义View步骤: 1>:values__attrs.xml,定义自定义属性; 2>:在第三个构造方法中获取自定义属性; 3>:onMeasure【不是必须的】; 4>:onDraw:绘制代…...
工业边缘网关HiWoo Box的4G/5G CPE功能:为现场无线设备提供网络
引言 随着工业物联网的快速发展,现场设备的无线连接需求越来越迫切。然而,在一些室外或者不方便布网的场景下,为现场的无线设备提供网络仍然是一个挑战。为了满足这一需求,工业边缘网关HiWoo Box引入了4G/5G CPE(Cust…...
Set 和 Map 数据结构
数据结构Set ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。 // 数组去重 const set new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4]目前个人感觉Se…...
nginx根据url参数动态代理
nginx根据url参数动态代理 请求url格式,其中参数proxy后面的url就是需要访问的真实地址: http://localhost:9388/?proxyhttp://localhost:8038/Content/layui/font/iconfont.woff?v256 http://localhost:9388/?proxyhttp://localhost:8072/article/A…...
TCP协议(收集和记录)
收集写的比较好的文章 TCP四次挥手详解 四次挥手介绍的非常详细, 重点介绍了各种异常情况下协议是如何处理的, 异常处理可以做到两点: 让连接保活, 也许只是一次连接异常让连接死掉后不影响后续的操作, 重点介绍了TIME_WAIT...
【Kafka】自动提交偏移量和手动提交偏移量的区别
区别 自动提交偏移量(Auto Commit Offset)和手动提交偏移量(Manual Commit Offset)是两种不同的消费者偏移量管理方式。 自动提交偏移量: 在自动提交模式下,消费者会定期自动将已消费的消息偏移量提交给…...

缠论线段的划分
第一种情况: 第二种情况: 第二种情况中的特例: 第二种情况的特例: 顶分型成立: 向上线段延续: 顶分型后面底分型,形成三段 插入一个分型的反面例子: dd...

【Linux】Ubuntu基本使用与配置, 以及常见问题汇总(一)
前言 大学期间,感觉很多时候学习课外知识都是被推着往前走,很多内容并没有深入去学习,知识的记录受限于所学比较片面,如今渐渐意识到似乎并没有建立起相关知识的体系架构,缺乏一个系统学习并整理的过程。本文将以Ubunt…...

【UE5 多人联机教程】02-开始游戏菜单控件
目录 步骤 一、完善开始游戏菜单控件 二、控件功能实现 2.1 “开始游戏”按钮切换界面 2.2 “创建房间”、“加入房间”按钮切换界面 2.3 “创建房间”按钮 步骤 一、完善开始游戏菜单控件 打开“UMG_Main” 首先在控件切换器外层包裹一个画布面板 然后调整控件切换器全…...

设计模式-工厂方法模式
基于面向对象语言开发中,免不得需要创建对象。前面讲解的"单例模式"也是如此,不过是要创建唯一的对象。本文要讲述“工厂方法模式”是要封装创建对象的过程。工厂,也称之为“制造厂”,用于创建具体的产品直接提供给外界…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...