websocket在java中的使用教程

本文从websocket服务端和客户端两个方面简单介绍下websocket在java中的使用。

一、websocket服务端(WebSocketServer)

websocket服务端是以本机作为消息的接受端,用于接受客户端websocket发送过来的消息,并可以通过客户端的websocket对象来反馈消息给websocket客户端,以下为websocket服务端创建步骤。

创建myWebSocketServer.java类,并继承WebSocketServer,并实现内部的5个方法,初始代码如下

import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;public class myWebSocketServer extends WebSocketServer {@Overridepublic void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) {}@Overridepublic void onClose(WebSocket webSocket, int i, String s, boolean b) {}@Overridepublic void onMessage(WebSocket webSocket, String s) {}@Overridepublic void onError(WebSocket webSocket, Exception e) {}@Overridepublic void onStart() {}
}

onOpen方法会在客户端websocket连接上当前服务端时调用,参数webSocket代表的就是客户端的websocket对象,可以通过该对象发送消息给客户端,也可以通过该对象获取客户端的ip地址等信息。

onClose方法是当客户端断开连接时调用

onMessage方法则是客户端向服务端发送消息时调用,其中webSocket参数表明发送消息的客户端,字符串s表示所发送的消息

onError方法是当客户端和当前服务端通信出现异常时调用

onStart方法则是服务端开启时调用

为此,我们可以实现简单的一些功能

import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;public class myWebSocketServer extends WebSocketServer {// 定义有参构造器,用于服务端websocket的创建public myWebSocketServer(String ip,Integer port){super(new InetSocketAddress(ip,port));}// 定义一个集合用来存储和当前websocket服务器保持连接的websocket客户端List<WebSocket> onLine = new ArrayList<>();@Overridepublic void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) {System.out.println("有新的websocket客户端连接:"+webSocket.getRemoteSocketAddress().getHostName()+":"+webSocket.getRemoteSocketAddress().getPort());// 当有客户端连接将其加入onLine集合中onLine.add(webSocket);}@Overridepublic void onClose(WebSocket webSocket, int i, String s, boolean b) {System.out.println("websocket客户端断开连接:"+webSocket.getRemoteSocketAddress().getHostName()+":"+webSocket.getRemoteSocketAddress().getPort());// 当有客户端断开连接将其从onLine集合中移除onLine.remove(webSocket);}@Overridepublic void onMessage(WebSocket webSocket, String s) {System.out.println("收到客户端 "+webSocket.getRemoteSocketAddress().getHostName()+":"+webSocket.getRemoteSocketAddress().getPort()+" 发送过来的消息:"+s);// 向客户端回馈消息webSocket.send("收到");// 亦可以群发消息for (WebSocket socket : onLine) {socket.send(webSocket.getRemoteSocketAddress().getHostName()+":"+webSocket.getRemoteSocketAddress().getPort()+" 群发消息:"+s);}}@Overridepublic void onError(WebSocket webSocket, Exception e) {System.out.println("和客户端 "+webSocket.getRemoteSocketAddress().getHostName()+":"+webSocket.getRemoteSocketAddress().getPort()+" 通信发生异常");}@Overridepublic void onStart() {System.out.println("websocket服务端已启动");}
}

websocket客户端(WebSocketClient)

import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;import java.net.URI;public class myWebSocketClient extends WebSocketClient {public myWebSocketClient(URI serverUri) {super(serverUri);}@Overridepublic void onOpen(ServerHandshake serverHandshake) {System.out.println("websocket成功连接");}@Overridepublic void onMessage(String s) {System.out.println("收到服务端发送的消息:"+s);}@Overridepublic void onClose(int i, String s, boolean b) {System.out.println("已经和服务端断开连接");}@Overridepublic void onError(Exception e) {System.out.println("和服务端通信发送异常");}
}

websocket客户端实现的方法含义和服务端一样

服务端和客户端通信测试

创建测试类

public class webSocketTest {public static void main(String[] args) throws Exception {// 创建服务端websocket对象myWebSocketServer server = new myWebSocketServer("127.0.0.1",8899);// 启动服务端websocketserver.start();// 循环启动多个客户端连接服务端for (int i = 0;i<4;i++) {// 连接服务端websocket的地址URI uri = new URI("ws://127.0.0.1:8899");// 创建客户端websocket对象myWebSocketClient client = new myWebSocketClient(uri);// 阻塞式连接client.connectBlocking();// 向服务端发送消息client.send("我是客户端"+i);}}
}

执行结果
在这里插入图片描述

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

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

相关文章

Cesium 自定义Primitive - 圆

一、创作思路 1、创建一个自定义CustomPrimitive 2、然后根据两个点&#xff0c;生成圆 3、方便后期绘制圆 二、实现代码 1、在vue的包中加入turf. npm install turf/turf 1、创建一个CustomCirclePrimitive类,并加入更新的代码 export default class CustomCirclePrimitive …

2024年软考重大改革

中国计算机技术职业资格网 考试日期 考试级别 考试资格名称 5月25日至28日 高级 系统分析师 系统架构设计师 信息系统项目管理师 中级 软件设计师 网络工程师 软件评测师 电子商务设计师 嵌入式系统设计师 数据库系统工程师 信息系统管理工程师 初级 程序员 …

lightGBM的学习整理

执行步骤 1、初始化&#xff0c;选择一个初始模型&#xff0c;通常是一个常数&#xff0c;比如分类问题中内的类别概率的先验值&#xff0c;回归问题中的目标变量的平均值。 2、训练决策树&#xff0c;对于每一轮迭代&#xff0c;计算当前模型的梯度&#xff08;损失函数的负…

鸿蒙应用组件

基础组件 索引组件—AlphabetIndexer&#xff08;相当于安卓的seedbar&#xff09; 使用&#xff1a;AlphabetIndexer(value: {arrayValue: Array<string>, selected: number})空白填充组件—Blank&#xff08;占位使用&#xff0c;当父组件为Row/Column/Flex时生效&am…

chrome插件extensions获取所有窗口tab页和windows页

获取windows页&#xff1a;https://developer.chrome.com/docs/extensions/reference/api/windows?hlzh-cn 获取所有tabs页&#xff1a;https://developer.chrome.com/docs/extensions/reference/api/tabs?hlzh-cnchrome.tabshttps://developer.chrome.com/docs/extensions/…

4G/5G执法记录仪、智能安全帽走国标GB28181接入海康、宇视等大平台,也可走平台与平台对接,以下级平台级联到上级大平台

AIoT万物智联&#xff0c;智能安全帽生产厂家&#xff0c;执法记录仪生产厂家&#xff0c;智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、无人机4G补传系统等统一接入大型融合通信可视指挥调度平台VM…

GO GMP

GMP 为了解决 Go 早期多线程 M 对应多协程 G 调度器的全局锁、中心化状态带来的锁竞争导致的性能下降等问题&#xff0c;Go 开发者引入了处理器 P 结构&#xff0c;形成了当前经典的 GMP 调度模型。 GMP 模型是 Go 语言调度器采用的并发编程模型它包含三个重要的组件&#xf…

独立站营销攻略:塑造品牌,掌控数据,应对挑战

随着出海热的加剧&#xff0c;独立站已成为品牌拓展海外市场的重要组成部分。独立站不仅能够帮助企业建立品牌形象&#xff0c;扩大市场份额&#xff0c;还能够提高用户忠诚度和品牌认知度。然而&#xff0c;独立站在推广营销方面也有着诸多挑战&#xff0c;如流量获取、用户粘…

测试需求平台10-DBUtils 优化数据连接与 SQL Limit 实现分页

✍此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版&#xff0c;拥抱Vue3.0将前端框架替换成字节最新开源的arco.design&#xff0c;其中约60%重构和20%新增内容&#xff0c;定位为从 0-1手把手实现简单的测试平台开发教程&#xff0c;内容将囊括基础、扩展和实战&a…

2191. 数字梯形问题(网络流,费用流,最大权不相交路径)

活动 - AcWing 给定一个由 n 行数字组成的数字梯形如下图所示。 梯形的第一行有 m 个数字。 从梯形的顶部的 m 个数字开始&#xff0c;在每个数字处可以沿左下或右下方向移动&#xff0c;形成一条从梯形的顶至底的路径。 规则 1&#xff1a;从梯形的顶至底的 m 条路径互不相…

隧道技术和代理技术(一)

目录 基础知识 单机-防火墙-限制协议出入站 域控-防火墙-组策略对象同步 域控-防火墙-组策略不出网上线 基础知识 -隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; -代理技术&#xff1a;解决网络通讯不通的问题&#xf…

职场卷王:我用可视化大屏模板做工作汇报,惊艳了同事和领导。

2023结束了&#xff0c;我和我的小伙伴们纷纷开始忙碌的年终总结和汇报。 正忙着汇总Excel数据、写word讲稿、找PPT模板时&#xff0c;我发现隔壁组的老王独自在大会议室偷偷调试起了那台汇报用的电视机。 不会吧不会吧&#xff0c;年终汇报还有一周呢&#xff0c;这家伙PPT都…