当前位置: 首页 > news >正文

通过IDEA写一个服务端和一个客户端之间的交互

服务端代码:

WebSocketConfig代码

package org.example.hufamessagedemo;import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.*;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(new MessageHandler(), "/ws").setAllowedOrigins("*"); // 允许所有客户端跨域连接}
}
MessageHandler代码
package org.example.hufamessagedemo;import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.util.concurrent.CopyOnWriteArrayList;public class MessageHandler extends TextWebSocketHandler {private static final CopyOnWriteArrayList<WebSocketSession> sessions = new CopyOnWriteArrayList<>();@Overridepublic void afterConnectionEstablished(WebSocketSession session) {sessions.add(session);System.out.println("新客户端连接: " + session.getId());}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println("收到消息: " + message.getPayload());// 广播给所有客户端for (WebSocketSession s : sessions) {if (s.isOpen()) {s.sendMessage(new TextMessage("用户" + session.getId() + ": " + message.getPayload()));}}}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) {sessions.remove(session);System.out.println("客户端断开: " + session.getId());}
}
HufamessagedemoApplication代码
package org.example.hufamessagedemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class HufamessagedemoApplication {public static void main(String[] args) {SpringApplication.run(HufamessagedemoApplication.class, args);}}

pom.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>hufamessagedemo</artifactId><version>0.0.1-SNAPSHOT</version><name>hufamessagedemo</name><description>hufamessagedemo</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

客户端代码:

DemoApplication代码
package com.example.demo;import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketHttpHeaders;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.net.URI;@SpringBootApplication
public class DemoApplication implements CommandLineRunner{public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Overridepublic void run(String... args) throws Exception {WebSocketClient client = new StandardWebSocketClient();WebSocketHandler handler = new TextWebSocketHandler() {@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {System.out.println("✅ 已连接到服务端");session.sendMessage(new TextMessage("你好,我是客户端!"));}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) {System.out.println("📩 收到服务端消息: " + message.getPayload());}};WebSocketHttpHeaders headers = new WebSocketHttpHeaders();// 这里传 handler、headers、URIWebSocketSession session = client.execute(handler, headers, URI.create("ws://localhost:8080/ws")).get();// 再发一条消息session.sendMessage(new TextMessage("第二条消息 from client"));}
}

pom.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>demo</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-websocket</artifactId></dependency><dependency><groupId>org.glassfish.tyrus.bundles</groupId><artifactId>tyrus-standalone-client</artifactId><version>2.1.3</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

客户端端口8081,服务端端口8080.

效果图:


文章转载自:

http://zeGivaId.bmmyx.cn
http://qtyoa56t.bmmyx.cn
http://LK5rt8sK.bmmyx.cn
http://X1Cfv3O3.bmmyx.cn
http://jrITMASs.bmmyx.cn
http://R3qCGWjR.bmmyx.cn
http://mJ2B8unX.bmmyx.cn
http://WMIwZgLM.bmmyx.cn
http://JpmUl9oh.bmmyx.cn
http://mHA7KrhF.bmmyx.cn
http://vu7kWEbW.bmmyx.cn
http://yair6kjb.bmmyx.cn
http://u2AIdakh.bmmyx.cn
http://VMT74zpL.bmmyx.cn
http://brVKZLMY.bmmyx.cn
http://ewj2MM35.bmmyx.cn
http://WWHeG2KK.bmmyx.cn
http://QwV67Y0O.bmmyx.cn
http://L37y2vkm.bmmyx.cn
http://zvrKY2L8.bmmyx.cn
http://dBs4YLTe.bmmyx.cn
http://TFudhQrS.bmmyx.cn
http://dHxERMdo.bmmyx.cn
http://t1WzzbNN.bmmyx.cn
http://BREXwFhG.bmmyx.cn
http://gUQNi1MB.bmmyx.cn
http://xqnSiFLo.bmmyx.cn
http://rJ3iCLtK.bmmyx.cn
http://V2hkXafa.bmmyx.cn
http://nbJyLMFl.bmmyx.cn
http://www.dtcms.com/a/365001.html

相关文章:

  • JetBrains 2025 全家桶 11合1 Windows直装(含 IDEA PyCharm、WebStorm、DataSpell、DataGrip等)
  • Linux 对目录授予用户读写权限的方法
  • kafka:【1】概念关系梳理
  • 华清远见25072班I/O学习day4
  • Flutter代码生成:告别重复劳动,效率飙升
  • 51单片机-LED与数码管模块
  • OpenHarmony Ability“全家桶”彻底拆解:从UIAbility到ExtensionAbility一文说清楚
  • 学习嵌入式的第三十二天——网络编程——TCP
  • 【机器学习学习笔记】逻辑回归实现与应用
  • 爬取m3u8视频完整教程
  • GitHub 上那些值得收藏的英文书籍推荐(计算机 非计算机类)
  • 一键掌握服务器健康状态与安全风险
  • 前端视角下的 Web 安全攻防:XSS、CSRF、DDoS 一次看懂
  • 02、连接服务器的几种方式
  • 企业文档安全守护者全面测评:7款加密软件深度解析,让商业机密固若金汤
  • JVM分析(OOM、死锁、死循环)(JProfiler、arthas、jvm自带工具)
  • 股指期货可以通过移仓长线持有吗?
  • 基于springboot的在线答题练习系统
  • 【正则表达式】 正则表达式的元字符是什么?正则表达式的元字符有什么作用?
  • 微软rStar2-Agent:新的GRPO-RoC算法让14B模型在复杂推理时超越了前沿大模型
  • DAO LLC:怀俄明州首个承认去中心化自治组织法人化的新里程碑
  • Android Looper源码阅读
  • 手搓一个企业级Agent智能体
  • PyTorch 面试题及详细答案120题(116-120)-- 综合应用与实践
  • 英语四级学习指南
  • 《单链表学习手册:从原理到代码实现(含头插 / 尾插 / 销毁)》
  • go-mapus为局域网地图协作而生
  • 充电枪结构-常规特征设计
  • 小程序点击之数据绑定
  • 【数学建模学习笔记】相关性分析