JAVA 中 Socket 和 WebSocket 区别

区别:

Socket: Socket是位于java.net包下的一个类,是 Java 提供的用于在客户端和服务器之间建立网络通信的底层套接字接口,用于传输层的网络通信。

WebSocket: WebSocket 是一种基于 TCP 协议的通信协议,建立在 Socket 的基础上,提供了用于实时双向通信的高级接口。

实现方法:

Socket: 使用 Socket 类可以创建 TCP/IP 连接并进行数据传输。客户端使用 Socket 和服务器建立连接,并通过输入流和输出流进行数据的发送和接收。

WebSocket: 使用 WebSocket 协议需要对服务器进行额外的配置。客户端与服务器通过 HTTP 协议进行握手,建立连接后,可以通过 WebSocket 的 API 进行实时的双向通信。

Socket 示例:

客户端:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class SocketClient {public static void main(String[] args) {try {Socket socket = new Socket("localhost", 8080);OutputStream outputStream = socket.getOutputStream();outputStream.write("Hello, Server!".getBytes());socket.close();} catch (IOException e) {e.printStackTrace();}}
}

服务器:

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServer {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8080);Socket socket = serverSocket.accept();InputStream inputStream = socket.getInputStream();byte[] buffer = new byte[4096];int bytesRead = inputStream.read(buffer);String message = new String(buffer, 0, bytesRead);System.out.println("Received message from client: " + message);socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}

WebSocket 示例:

import javax.websocket.*;
import java.net.URI;@ClientEndpoint
public class WebSocketClient {@OnMessagepublic void onMessage(String message) {System.out.println("Received message from server: " + message);}public static void main(String[] args) {WebSocketContainer container = ContainerProvider.getWebSocketContainer();try {Session session = container.connectToServer(WebSocketClient.class, new URI("ws://localhost:8080/websocket"));session.getBasicRemote().sendText("Hello, Server!");} catch (Exception e) {e.printStackTrace();}}
}@ServerEndpoint("/websocket")
public class WebSocketServer {@OnMessagepublic String onMessage(String message) {System.out.println("Received message from client: " + message);return "Server received your message: " + message;}
}

上面注解是 Java WebSocket API(JSR 356)中提供的一些标准注解,用于在 Java 中创建 WebSocket 客户端和服务器端的端点。它们的具体含义如下:

@ClientEndpoint: @ClientEndpoint 是一个用于标注 WebSocket 客户端端点的注解。通过在一个类上使用 @ClientEndpoint 注解,将该类标记为 WebSocket 客户端的端点,表示该类将处理与服务器的连接和消息交互。可以在该类中定义处理消息的方法,如 @OnMessage。

@OnMessage: @OnMessage 是一个用于标注 WebSocket 终端的注解,指示一个方法将用于处理接收到的 WebSocket 消息。当收到消息时,WebSocket 运行时将调用带有 @OnMessage 注解的方法,并将接收到的消息作为参数传递给该方法。该方法可以根据需要进行消息的处理和响应。

@ServerEndpoint(“/websocket”): @ServerEndpoint 是一个用于标注 WebSocket 服务器端终端的注解。通过在一个类上使用 @ServerEndpoint 注解,并指定一个 URI 路径参数,将该类标记为 WebSocket 服务器端的端点。当客户端连接到指定的 URI 时,WebSocket 运行时将创建一个新的该类的实例,并将其用作与客户端的通信终端。类中可以定义多个方法,并使用 @OnMessage 注解进行消息的处理。

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

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

相关文章

顺序表——leetcode

原地删除数据 我们的思路这里给的是双指针,给两个指针,从前往后移动,如果不是val就覆盖,如果是我就跳过,大家一定要看到我们的条件是原地修改,所以我们不能另开一个数组来实现我们这道题目。 这里我们给两…

【React】02.create-react-app基础操作

文章目录 当前以及未来的开发,一定是:组件化开发如何划分组件React的工程化/组件化开发create-react-app基础运用运用react常用版本一个React项目中,默认会安装 2023年最新珠峰React全家桶【react基础-进阶-项目-源码-淘系-面试题】 当前以及…

docker进阶

文章目录 docker 进阶Part1 常用命令总结docker version 查看docker客户端和服务端信息docker info 查看更加详细信息docker images 列出所有镜像基本用法常用选项 docker search 搜索镜像基本用法示例用法 docker pull 拉取镜像基本用法示例用法 docker rmi 删除镜像基本用法示…

这样的软件测试报告模板你绝对没见过!!!

测试报告如此重要,那么我们应该如何撰写呢?为了让大家彻底掌握测试模板的撰写,所以本文结构如下: 1、测试报告写给谁看? 2、测试报告的基本骨架(通过|不通过)? 3、测试报告如何才能达…

RSA ——Rational Structure Architecture r入门教程

(一)UML概述 UML,即统一建模语言(Unified Modeling Language),是一种通用的面向对象的可视化建模语言。其核心目的是为软件的面向对象描述和建模提供一种标准化的方法。UML并不是一种编程语言,因…

海外跨境电商云厂商阿里云、华为云、九河云选择攻略

近几年出海已成为趋势,而要打有准备的仗,就必须先收集关键信息。国内企业出海需要对海外市场进行深入的分析和挖掘,数据分析技术可以帮助国内企业更好地了解海外市场的需求和趋势,包括市场调研、用户画像、销售数据分析等方面&…

达梦数据库快速配置主备

主备机服务器初始化数据库实例并启动数据库 主机操作: 创建数据库实例: cd /opt/dmdbms/bin/bin ./dminit path/opt/dmdbms/data page_size32 extent_size32 log_size2048 case_sensitiven charset1 length_in_char1 db_nameDAMENG instance_nameDMSERV…

如何将 ruby 打包类似于jdk在另一台相同架构的机器上面开箱即用

需求 目前工作中使用到了ruby作为java 项目的中转语言,但是部署ruby的时候由于环境的不同会出现安装依赖包失败的问题,如何找到一种开箱即用的方式类似于java 中的jdk内置jvm这种方式 解决 TruffleRuby 完美解决问题,TruffleRuby 是使用 T…

Go语言入门-流程控制语句

流程控制 Go语言中有以下几种常见的流程控制语句: 条件语句(Conditional Statements): if语句:用于根据条件执行代码块。else语句:在if条件不满足时执行的语句块。else if语句:用于在多个条件之…

餐饮连锁品牌2023:端起“外卖碗”,吃上“下沉饭”

作者 | 陈小江 文 | 螳螂观察 “没想到,蜜雪(蜜雪冰城)能到我们这乡镇来开,我觉得挺意外的。「柏记水饺」也算挺大一品牌,没想到也能来(我们)乡镇”。 谈起不断有连锁品牌进镇开店,黑龙江讷河…

框架安全-CVE 漏洞复现DjangoFlaskNode.jsJQuery框架漏洞复现

目录 服务攻防-框架安全&CVE复现&Django&Flask&Node.JS&JQuery漏洞复现中间件列表介绍常见语言开发框架Python开发框架安全-Django&Flask漏洞复现Django开发框架漏洞复现CVE-2019-14234(Django JSONField/HStoreField SQL注入漏洞&#xff…

9. linux系统设置开机自启动发射热点

1. 说明 某种情况下需要使用wifi进行通信时,可以在linux系统中发射一个热点让以使别的设备能够连接,然后进行通信。一般情况下可以在有无线wifi发射器的情况下,每次linux系统开机后,手动设置开启热点,但这种方式比较麻…

分享一下怎么做陪诊小程序

在当今快节奏的社会中,人们的生活压力越来越大,尤其是在大城市中,由于工作繁忙,生活节奏快,很多人都感到看病难、看病贵的问题。为了解决这一问题,陪诊小程序应运而生。陪诊小程序是一种可以提供线上预约、…

Redis Cluster (Redis 集群),使用Redis自带的集群功能搭建无主模式集群

文章目录 一、概述二、模拟配置说明三、脚本方式创建 Redis Cluster3.1 配置创建脚本3.2 启动集群实例3.3 创建集群3.4 测试集群3.5 停止集群实例3.6 删除(清空)集群 四、手动创建集群 Redis Cluster4.1 启动集群实例4.2 手动创建集群4.4 测试集群 五、集…

C/C++药房管理 2021年3月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C药房管理 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C药房管理 2021年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 随着信息技术的蓬勃发展,医疗信息化已经成为…

十八、模型构建器(ModelBuilder)快速提取城市建成区——批量掩膜提取夜光数据、夜光数据转面、面数据融合、要素转Excel(基于参考比较法)

一、前言 前文实现批量投影栅格、转为整型,接下来重点实现批量提取夜光数据,夜光数据转面、夜光数据面数据融合、要素转Excel。将相关结果转为Excel,接下来就是在Excel中进行阈值的确定,阈值确定无法通过批量操作,除非采用其他方式,但是那样的学习成本较高,对于参考比较…

【C++】详解map和set基本接口及使用

文章目录 一、关联式容器与键值对1.1关联式容器(之前学的都是序列容器)1.2键值对pairmake_pair函数(map在插入的时候会很方便) 1.3树形结构的关联式容器 二、set2.1set的基本介绍2.1默认构造、迭代器区间构造、拷贝构造&#xff0…

yapi通过docker-compose安装遇到的问题

docker无法访问外部网络 https://www.jianshu.com/p/f3ce460625fb iptables: No chain/target/match by that name service docker restart getaddrinfo EAI_AGAIN registry.npmjs.org docker内网络不通,默认docker通过桥接模式连接到宿主机,参考问…

查询Oracle所有用户相关信息

$sqlplus / as sysdba 1. 查询oracle中所有用户信息 select * from dba_users; select * from all_users; select distinct owner from all_objects; 2. 只查询用户和密码 select username,password from dba_users; 3. 查询当前用户信息 select * from dba_ustats; 4…

ROS常用命令及多机(TX2 与虚拟机)通信步骤

目录 ROS常用命令 创建工作空间 编译工作空间 创建功能包 编译功能包 检查环境变量 查看ROS节点关系图 rviz使用 Ubuntu常用命令 ROS多机通信步骤 配置网络 设置网络名称 修改bash 互ping虚拟机与tx2 tx2中启动master 虚拟机中添加镜像源 TX2中添加镜像源 ROS常…